运行 并行基于 bash 中文件中的变量

Running parallel based on variables from file in bash

我一直在尝试并行 运行 一个 while-loop 来完成一项需要数天的工作。

我看过其他答案,其中并行是在 while-loop 中实现的,但对于那种情况,它确实以块的形式工作,下一个工作仅在所有先前的工作完成后才工作。

这是代码,它再现了 CSV 文件的两列:

while IFS="," read fq tab
do
echo $fq
echo $tab
done < /home/samples.csv

csv 文件包含两个没有 header 的列(第 1 列和第 2 列),其中存储变量。例如:

a1,b1
a2,b2
a3,b3
a4,b4

我一直在尝试 运行 并行执行此操作,因此当一项工作完成后,另一项工作会立即开始,因为 运行 时间很长。

这是代码:

while IFS="," read fq tab
do
parallel -j 1 --verbose --delay 2  "echo $fq; echo $tab" 
done < /home/samples.csv

但这会产生

a1 b1 a1,b1

a1 b1 a2,b2

a1 b1 a3,b3

a1 b1 a4,b4

而不是

a1   b1
a2   b2
a3   b3
a4   b4
cat <<_EOF > samples.csv
a2,b2
a3,b3
a4,b4
_EOF

cat samples.csv | parallel --colsep , echo column 1 = {1} column 2 = {2}

如果samples.csv是TAB分隔的,;分隔,或用空格分隔:

cat samples.csv | parallel --colsep '\t' echo column 1 = {1} column 2 = {2}
cat samples.csv | parallel --colsep ';' echo column 1 = {1} column 2 = {2}
cat samples.csv | parallel --colsep ' +' echo column 1 = {1} column 2 = {2}