在bash中按空间将字符串拆分为并行管道
我有一段bash代码,它在以空格分隔的字符串中的文件名上循环。然后对每个文件名运行一个函数。看起来是这样的:在bash中按空间将字符串拆分为并行管道,bash,parallel-processing,gnu-parallel,Bash,Parallel Processing,Gnu Parallel,我有一段bash代码,它在以空格分隔的字符串中的文件名上循环。然后对每个文件名运行一个函数。看起来是这样的: TCURR=0 for F in $FILES; do TCURR=$[TCURR + 1] do_something $TCURR $F & done wait 如何使gnu并行工作?我不知道如何通过管道将$FILES变量导入其中,使其工作 这是我试过的,两种方法都不管用。我是根据平行示例页上的内容编写的。为了简单起见,我只是将1而不是TCURR作为第一个变量发送给函
TCURR=0
for F in $FILES; do
TCURR=$[TCURR + 1]
do_something $TCURR $F &
done
wait
如何使gnu并行工作?我不知道如何通过管道将$FILES变量导入其中,使其工作
这是我试过的,两种方法都不管用。我是根据平行示例页上的内容编写的。为了简单起见,我只是将1而不是TCURR作为第一个变量发送给函数,尽管我也想知道如何做到这一点
$FILES | parallel“dou_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