2011-06-01 144 views
5

我在Linux系统上有一个大约10GB的文件。它包含20,000,000个二进制记录,但每个记录由ASCII分隔符“$”分隔。我想使用split命令或其组合将文件分块成较小的部分。理想情况下,我可以指定该命令应该将每1,000条记录(因此每1,000个分隔符)拆分为单独的文件。有人能帮忙吗?在分隔符上分割文件

回答

5

问题的唯一非传统部分似乎是记录分隔符。我敢肯定,这可以在awk中修复 - 但我碰巧讨厌awk

我会在“正常”的问题,第一境界其转移:

tr '$' '\n' < large_records.txt | split -l 1000 

默认将创建xaaxabxac ......文件;看man split更多选项

+0

这完美地工作了它产生的记录直到它出现错误(我认为这是一个非常简单的修复)。错误是:split:输出文件后缀耗尽。谢谢你的帮助! – 2011-06-01 12:22:59

+1

呃...我修复了你的manpage链接; ['split ... -a 7'](http://unixhelp.ed.ac.uk/CGI/man-cgi?split)应该做得很好 – sehe 2011-06-01 12:35:48

+0

非常好。很棒! – 2011-06-01 12:39:45

2

我爱awk的:)

BEGIN { RS="$"; chunk=1; count=0; size=1000 } 
{ 
    print $0 > "/tmp/chunk" chunk; 
    if (++count>=size) { 
     chunk++; 
     count=0; 
    } 
} 

(注意,awk中的重定向操作者只需截断/创建它的第一次调用的文件 - 后续引用被视为附加业务 - 不像外壳重定向)