1

我有一个包含许多序列的大文件,每个序列都以 . 开头>MSTRG,我需要将其分成四个以在它们上运行工具。当我使用$ split -b [desired file size] [output prefix]或使用该-l选项时,它会将其拆分为所需大小的部分。但是,它会不加选择地这样做,从而导致序列中断。

一旦进行了 1/4 的匹配,有没有办法一起使用split和拆分文件?grep>MSTRG

4

1 回答 1

0
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用该程序替换。这样您就可以完全避免拥有这些临时拆分文件的步骤。如果您的程序无法从标准输入(标准输入)读取,请查看--cator --pipe。它们是为这种情况而设计的。

于 2020-07-07T07:57:24.863 回答