使用Linux中的过滤器对来自txt文件的行进行分组,以创建多个txt文件

时间:2012-09-27 16:56:04

标签: linux filter grep

我有一个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过滤成块的最佳命令是什么?

提前致谢。

3 个答案:

答案 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