【发布时间】:2017-09-28 07:46:01
【问题描述】:
我有一个很长的 Fasta 文件(来自已处理的 Fastq 文件),我需要将其拆分为较小的文件。我正在尝试使用并行来做到这一点,但我不知道该怎么做。我需要将 Fasta 文件拆分为较小的文件,每个文件的最大大小为 700Mb。我的目标是将每个文件保存为 {n}.faa,其中 n 的序号为 (01.faa, 02.faa, 03.faa, 04.faa ... 10.faa, 11.faa, 12.faa 。 .. n.faa),每个都具有大致相同的尺寸。据我了解并行,我认为这是我应该使用的:
parallel -a MyFile.fasta --block 700M --pipe-part --recend '\n' --recstart '>' {} > #.faa
不过,我有两个问题。首先,如何使每个文件的大小大致相同,这样对于 1500Mb 的初始文件,我不会以两个 700Mb 文件和一个 100Mb 文件结束,而是三个 500Mb 文件?我对此的一个想法是计算所需文件的数量(原始文件大小/ 700,四舍五入),然后将原始大小除以所需文件的数量,并且由于数字已四舍五入为整数,我会有块大小(小于 700Mb),所以我会做这样的事情:
original_size=$(wc -c MyFile.fasta | sed 's/ .*//') #get size
number=`expr $original_size / 734003200 + 1`
size=`expr $(wc -c MyFile.fasta) / $number`
有了这个我可以得到每个文件应该有的大小(以字节为单位),以获得相同大小的文件,但都在 700Mb 以下。有没有更简单的方法可以只使用并行工具来做到这一点?
我应该怎么做才能将每个块保存在不同的文件中? “{} > #.faa”方法是否正确?或者使用 --cat 会更有效吗? 另外,如何让数字“#”成为两位数(01...10)?
另外,如果它必须将文件拆分为 12 个较小的文件,但我的计算机只有 8 个内核,它是否会使用 8 个内核来处理 8 个文件,并且在完成作业时运行剩余的 4 个作业,或者我应该以某种方式限制我的作业核心数?
【问题讨论】:
标签: split parallel-processing fasta gnu-parallel fastq