我有一个包含许多序列的大文件,每个序列都以 . 开头>MSTRG
,我需要将其分成四个以在它们上运行工具。当我使用$ split -b [desired file size] [output prefix]
或使用该-l
选项时,它会将其拆分为所需大小的部分。但是,它会不加选择地这样做,从而导致序列中断。
一旦进行了 1/4 的匹配,有没有办法一起使用split
和拆分文件?grep
>MSTRG
parallel --recstart '>MSTRG' # Make records start with '>MSTRG'
--recend '\n' # and end with newline (so "foo>MSTRG" is ignored)
-a bigfile # Use bigfile as input
--pipepart # Efficiently pipe blocks of data into a program (faster than --pipe)
-j4 # Run 4 jobs in parallel
--block -1 # Divide into one block per running job (i.e. 1/4 of bigfile size)
'cat > {#}.out' # save output into 1..4.out
GNU Parallel 将计算并行运行的作业数量 (4) 和大文件的大小 (bigsize)。然后它将计算块大小为 bigsize/4。然后它会在 n*bigsize/4 的位置附近寻找 regen+regstart。当它找到一条完整的记录时,它将在该记录处拆分。
如果目标是在 4 个输出文件中的每一个上运行相同的程序,您通常可以cat
用该程序替换。这样您就可以完全避免拥有这些临时拆分文件的步骤。如果您的程序无法从标准输入(标准输入)读取,请查看--cat
or --pipe
。它们是为这种情况而设计的。