按 space 拆分字符串以在 bash 中并行传输
Splitting a string by space to pipe into parallel in bash
我有一段 bash 代码循环遍历由空格分隔的字符串中的文件名。然后对每个文件名运行一个函数。看起来是这样的:
TCURR=0
for F in $FILES; do
TCURR=$[TCURR + 1]
do_something $TCURR $F &
done
wait
我怎样才能使它与 gnu 并行工作?我无法弄清楚如何将 $FILES 变量通过管道传递给它,这样它就可以工作了。
以下是我尝试过的方法,但均无效。我将这些基于并行示例页面。为了简单起见,我只是将 1 而不是 TCURR 作为第一个变量发送给函数,尽管我也想知道如何做到这一点。
$FILES | parallel "do_something 1 {}"
echo $FILES | parallel "do_something 1 {}"
搞清楚了,只需要在变量周围加上引号。所以它看起来像:
echo "$FILES" | parallel "do_something 1 {}"
虽然我还没有想出如何让计数器工作
你可能想要这个:
#!/bin/bash
FILES=....
TCURR=0
for F in $FILES; do
((TCURR++))
echo do_something $TCURR $F
done | parallel
parallel do_something {#} {} ::: $FILES
我有一段 bash 代码循环遍历由空格分隔的字符串中的文件名。然后对每个文件名运行一个函数。看起来是这样的:
TCURR=0
for F in $FILES; do
TCURR=$[TCURR + 1]
do_something $TCURR $F &
done
wait
我怎样才能使它与 gnu 并行工作?我无法弄清楚如何将 $FILES 变量通过管道传递给它,这样它就可以工作了。
以下是我尝试过的方法,但均无效。我将这些基于并行示例页面。为了简单起见,我只是将 1 而不是 TCURR 作为第一个变量发送给函数,尽管我也想知道如何做到这一点。
$FILES | parallel "do_something 1 {}"
echo $FILES | parallel "do_something 1 {}"
搞清楚了,只需要在变量周围加上引号。所以它看起来像:
echo "$FILES" | parallel "do_something 1 {}"
虽然我还没有想出如何让计数器工作
你可能想要这个:
#!/bin/bash
FILES=....
TCURR=0
for F in $FILES; do
((TCURR++))
echo do_something $TCURR $F
done | parallel
parallel do_something {#} {} ::: $FILES