按空格拆分字符串以在bash中并行管道

时间:2015-03-03 17:31:37

标签: bash parallel-processing gnu-parallel

我有一段bash代码循环遍历由空格分隔的字符串中的文件名。然后,它针对每个文件名运行一个函数。它看起来像这样:

TCURR=0
for F in $FILES; do
  TCURR=$[TCURR + 1]
  do_something $TCURR $F &
done
wait

如何使用gnu parallel进行此操作?我无法弄清楚如何将$ FILES变量传递给它,以便它可以工作。

这是我尝试过的,两者都不起作用。我将这些基于并行示例页面。我只是发送1代替TCURR作为函数的第一个变量以简化,虽然我也想知道如何做到这一点。

$FILES | parallel "do_something 1 {}"

echo $FILES | parallel "do_something 1 {}"

3 个答案:

答案 0 :(得分:2)

parallel do_something {#} {} ::: $FILES

答案 1 :(得分:1)

你可能想要这个:

#!/bin/bash
FILES=....
TCURR=0
for F in $FILES; do
    ((TCURR++))
    echo do_something $TCURR $F 
done | parallel

答案 2 :(得分:0)

想出来,只需要变量周围的引号。所以它看起来像:

echo "$FILES" | parallel "do_something 1 {}"

虽然我还没弄清楚如何使计数器工作