在 for 循环中附加命令的输出

在 for 循环中附加命令的输出

我正在使用一个简单的 for 循环来处理某些输入文件并在一个文件中获取输出。我正在使用的是

for k in ../some_directory/*.txt; 
    do command (containing -i $k -o outputfile.txt); 
done

现在每个循环都会给出一个输出。我希望将输出写入一个文件中。这个循环只是替换了之前的所有文件,并为我提供了许多outputfile.txt 文件,每个文件都有每个循环的输出。如何将命令附加到一个文件?我不需要屏幕输出,而是每个命令的输出。

注意:我不是在谈论或者

答案1

您有两种选择来获得您想要的结果:

for k in /path/to/*.txt; do
    some_command -i "$k" >> /path/to/output.txt
done

或者

for k in /path/to/*.txt; do
    some_command -i "$k"
done >> /path/to/output.txt

如果您的程序不写入标准输出,并且仅有的写入指定的文件-o,您可以这样做:

for k in /path/to/*.txt; do
    some_command -i "$k" -o /tmp/output.txt
    cat /tmp/output.txt >> /path/to/real_output.txt
done
rm /tmp/output.txt

答案2

只是想到了一个更简单的解决方案。我只需要提供与输入相同的文件名作为输出。这解决了我的问题,因为所有更改都被附加并且旧的输出文件被备份。

谢谢

答案3

for name in ../some_directory/*.txt; do
    outfile="$name"-out
    command (containing -i "$name" -o "$outfile"); 
done

这将通过简单地将字符串附加到输入文件的名称来构造输出文件的名称-out

请注意,这outfile=out-"$name"不起作用,因为$name还包含文件名的路径。

你想在文件名前添加一个字符串吗?你可以这样做

outdir=${name%/*}        # remove filename component from $name
outfile=out-${name##*/}  # remove the path component from $name (and prepend string)

然后用作$outdir/$outfile输出文件路径。

相关内容