0

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

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

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

现在我有一个问题:

如果这是在几千个文件上完成的,那么这样放置是一个好方法吗?

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

问候, 艾瑞克

4

2 回答 2

1

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

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

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

parallel ExtractOutCalls2.sh - {} ::: /home/moleculo/x* > output
于 2013-08-17T08:33:07.113 回答
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.*

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

于 2013-08-16T14:09:05.343 回答