我有一个txt文件,其中每一行以参与者No开头,后跟日期和其他变量(仅限数字),格式为:
S001_2 20090926 14756 93
S002_2 20090803 15876 13
我想编写一个脚本,创建较小的txt文件,每个文件只包含20个参与者(因此,第一个文件将包含从S001_2到S020_2的行;第二个从S021_2到S040_2;主题总数大约为200)。但是,主题没有组织,因此我不能用sed设置范围。
根据行开头的数字(SOO1_2)将ppts过滤成块的最佳命令是什么?
提前致谢。
答案 0 :(得分:1)
没有任何参数的排序应该是合适的,因为您的数字中有前导零,如S001_2
。所以,首先对文件进行排序:
sort file.txt > sorted.txt
然后,您将能够使用sed为file_sort.txt设置范围
这看起来像是一个用于将已排序文件拆分为20行文件的完整脚本:
num=1;
i=1;
lines=`wc -l sorted.txt | cut -d' ' -f 1`;#get number of lines
while [ $i -lt $lines ];do
sed -n $i,`echo $i+19 | bc`p sorted.txt > file$num;
num=`echo $num+1 | bc`;
i=`echo $i+20 | bc`;
done;
答案 1 :(得分:1)
使用split命令拆分没有范围和sed的文件(或过滤结果)。根据文档,这应该工作:
cat file.txt | split -l 20 - PREFIX
这将生成文件PREFIXaa,PREFIXab,...(请注意,它不会将.txt扩展名添加到文件名中!)
如果您想先按照@Sergey描述的方式过滤文件:
cat file.txt |排序| split -l 20 - PREFIX
答案 2 :(得分:1)
$ split -d -l 20 file.txt -a3 db_
生成:db_000,db_001,db_002,...,db_N