7
如何在不分割多行记录的情况下有效地分割大型文本文件?
我有一个大的文本文件(gz'ed时为〜50Gb)。该文件包含4*N行或N记录;即每条记录由4行组成。我想将此文件拆分为4个较小的文件,每个文件的大小约为输入文件的25%。如何在记录边界分割文件? 天真的方法是zcat file | wc -l获取行数,将其除以4,然后使用split -l <number> file。但是,这会翻遍文件两次,并且行计数非常慢(36分钟)。有没有更好的办法? 这很接近,但不是我想要的。接受的答案也会进行行计数。 编辑: 该文件包含fastq格式的测序数据。两条记录如下所示(匿名): @NxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxGCGA+ATAGAGAG xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTTTATGTTTTTAATTAATTCTGTTTCCTCAGATTGATGATGAAGTTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + AAAAA#FFFFFFFFFFFFAFFFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF<AFFFFFFFFFFAFFFFFFFFFFFFFFFFFFF<FFFFFFFFFAFFFAFFAFFAFFFFFFFFAFFFFFFAAFFF<FAFAFFFFA @NxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxGCGA+ATAGAGAG xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxCCCTCTGCTGGAACTGACACGCAGACATTCAGCGGCTCCGCCGCCxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + AAAAA#FFFFF7FFFFFFAFFFFA#F7FFFFFFFFF7FFFFFAF<FFFFFFFFFFFFFFAFFF.F.FFFFF.FAFFF.FFFFFFFFFFFFFF.)F.FFA))FFF7)F7F<.FFFF.FFF7FF<.FFA<7FA.<.7FF.FFFAFF 每条记录的第一行以开头@。 编辑2: zcat file > /dev/null 需要31分钟。 EDIT3: Onlye第一行以开头@。其他任何人都不会。看这里。记录需要保持秩序。向结果文件中添加任何内容都是不正确的。