0

我有一个 txt 文件,其中每一行以参与者编号开头,然后是日期和其他变量(仅限数字),格式如下:

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

提前致谢。

4

3 回答 3

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;
于 2012-09-27T17:07:47.723 回答
1

使用split命令拆分没有范围和 sed 的文件(或过滤结果)。根据文档,这应该有效:

猫文件.txt | 拆分 -l 20 - 前缀

这将生成文件 PREFIXaa、PREFIXab、...(请注意,它不会在文件名中添加 .txt 扩展名!)

如果您想先过滤文件,请按照@Sergey 描述的方式:

猫文件.txt | 排序 | 拆分 -l 20 - 前缀

于 2012-09-27T17:20:39.347 回答
1
$ split -d -l 20 file.txt -a3 db_

产生:db_000, db_001, db_002, ..., db_N

于 2012-09-27T17:57:22.697 回答