Bash并行处理多个输入文件,一个输出文件

时间:2013-08-16 14:00:06

标签: bash parallel-processing

我创建了一个遍历多个文件的for循环,并将结果输出到一个文件中:

for x in /home/moleculo/x*; do ExtractOutCalls2.sh /home/Scripts/000 $x & done

所以我的每个输入文件都以字母x开头,即x *作为输入。脚本将每个输入文件$ x输出到文件/ home / Scripts / 000

现在我有一个问题:

如果这是在几千个文件上完成的,这是一个好的方式吗?

如果我使用多个输入文件,但指定一个输出文件,这是否意味着我的输出将不会被追加?如果没有,怎么做

此致 Irek

2 个答案:

答案 0 :(得分:1)

是的,您的输出文件会被每个进程覆盖。将每个脚本输出到其自己的文件,并在完成所有脚本后,连接输出:

i=0
for x in /home/moleculo/x* ; do
    ExtractOutCalls2.sh /home/Scripts/000 $x > OUT.$i &
    (( i++ ))
done
wait
cat OUT.* > OUT
rm OUT.*

您必须将脚本更改为输出到标准输出而不是文件,或使其接受要创建的输出文件的名称。

答案 1 :(得分:1)

通常你可以使用该文件来指定标准输出:

for x in /home/moleculo/x*; do ExtractOutCalls2.sh - $x & done

为避免混合输出,请使用GNU Parallel:

parallel ExtractOutCalls2.sh - {} ::: /home/moleculo/x* > output