首页 > 解决方案 > 使用 GNU 并行读取文件

问题描述

我有一个如下所示的文件:

chr1  1  5  ID1 HK1
chr2  2  8  ID2 HK3
...

我想提取每个 ID 的所有行并将它们写入该 ID 的相应文件。以下代码工作得很好,但我想将它与 并行化GNU parallel,因为只有一个内核(我有 72 个)太慢了:

while IFS= read -r line
    do  
        a=$(echo "$line" | cut -f 4- | cut -f -1)
        b=$(echo "$line" | cut -f -3)
        echo $b >> "$a.bed"
    done < "file"

我以前用 . 做过这个grep,但由于某些文件的行数 >800M,这也太慢了。我将如何将其传递给GNU parallel正确的方式?谢谢!

标签: bashshellunixparallel-processing

解决方案


原来GNU parallel有一个选项可以逐行读取文件并将该行作为参数传递:parallel -a. 我将代码更改为:

parallel -j 60 -a temp ./make_file.sh {}

推荐阅读