bash - 如何读取 2 列文件并将每列作为 GNU 并行的配对输入传递

标签 bash parallel-processing gnu-parallel

我在一个目录中有一个配对文件列表,我将其放入文件中(使用 paste)

cat list.files.r12.txt | head -n3
./ID1_L2_R1_001.fastq.gz    ./ID1_L2_R2_001.fastq.gz
./ID2_L3_R1_001.fastq.gz    ./ID2_L3_R2_001.fastq.gz
./ID3_L2_R1_001.fastq.gz    ./ID3_L2_R2_001.fastq.gz

您可以看到该对位于 R1R2 之间。

这仅用于测试,因为这将传递给另一个命令。下面的命令只是逐行粘贴。

parallel -j 1 "echo {}" ::::  <(cat list.files.r12.txt | head -n3)

此文件重复文件

parallel -j 1 "echo {} {}" ::::  <(cat list.files.r12.txt | head -n3)

这不起作用:

parallel -j 1 "echo {1} {2}" ::::  <(cat list.files.r12.txt | head -n3)

基本上,我想要的是 list.files.r12.txt 文件的每一行都可以并行执行。这是所需的输出:

program ... ./ID1_L2_R1_001.fastq.gz ./ID1_L2_R2_001.fastq.gz
program ... ./ID2_L2_R1_001.fastq.gz ./ID2_L2_R2_001.fastq.gz
program ... ./ID3_L2_R1_001.fastq.gz ./ID3_L2_R2_001.fastq.gz

最佳答案

cat list.files.r12.txt | head -n3 |
   parallel --colsep '\t' echo
cat list.files.r12.txt | head -n3 |
   parallel --colsep '\t' echo one:{1} two:{2}

当您进行配对末端读取时,您通常可以执行以下操作:

parallel --plus echo read:{} paired:{/_R1_/_R2_/} ::: *__R1_*

这样就可以避免粘贴。

关于bash - 如何读取 2 列文件并将每列作为 GNU 并行的配对输入传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75665926/

相关文章:

regex - 单引号内的单引号问题 - Bash 命令行 GNU 并行

c# - 为什么 List<Task> 并不总是并行运行是有原因的?

c - 在 C 上使用 pthreads 实现屏障

linux - 在 linux 中使用 wait 执行两个命令

linux - 如何在 Linux 中检查第二个列表名称中的文件名?

optimization - 矢量化代码以实现高效实现

google-compute-engine - 使用 gnu 并行进行自适应负载平衡

linux - GNU 并行 |管道命令

linux - 通过网络接口(interface)发送数据包(icmp 或其他),绕过路由表

linux - 仅特定用户 Shell 脚本的 USERID、PID、TIME 和 COMMAND