linux shell 切割文件,linux shell 将文件按照行数以及顺序拆分成多个文件
awk -vf=3 -vl="`wc -l file`" 'BEGIN{p=int(l/f);q=(l%f);for(n=1;n<=f;n++)a[n]=n*p+((n<=q)?++x:x)}{if(NR>a[i])i++;print >"file"i}' file
這里的-vf=3 表示將file拆分成3個文件,另外還有一種解法,如下所示:
#!/bin/bash
if [ $# -ne 2 ];then
echo "U: sh $0 [file] [fnumber]"
echo "E: sh $0 myfile 3"
exit 1
fi
srcfile=$1 #原始文件
fnumber=$2 #需要拆分的文件個數
eval $(cat $srcfile | awk -vn=$fnumber 'END{print "total="NR,"fline="int(NR/n),"extra="NR%n,"cline="int(NR/n)+1}')
# total:原始文件總行數
# fline:拆分文件平均行數
# extra:需要擴展行數的文件個數
# cline:當前拆分文件行數
i=1
iline=1
while true;do
filename="file$i"
# 按行的順序分別寫入文件中
if [ $extra = 0 ];then
echo "$filename lines: $fline"
tail -n +$iline $srcfile | head -n $fline > $filename
iline=$((iline+fline))
else
echo "$filename lines: $cline"
tail -n +$iline $srcfile | head -n $cline > $filename
iline=$((iline+cline))
extra=$((extra-1))
fi
((i++))
[ $iline -ge $total ] && exit 0
done
總結
以上是生活随笔為你收集整理的linux shell 切割文件,linux shell 将文件按照行数以及顺序拆分成多个文件的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 别人拿我的征信能干嘛 征信泄露的影响
- 下一篇: 异地公积金缴存证明和明细怎么开 怎么开异
