目前我使用多行将内容附加到组合文件中,例如
./myprogram 1.txt > Out.txt # Overwrite for the 1st file
./myprogram 2.txt >> Out.txt
./myprogram 3.txt >> Out.txt
./myprogram 4.txt >> Out.txt
可以用单线代替吗?
答案1
(./myprogram 1.txt; ./myprogram 2.txt; ./myprogram 3.txt; ./myprogram 4.txt) > out.txt
答案2
这取决于您想要做什么以及您的程序如何处理输入参数。
但假设你有/path/to/myprogram.sh
这样的人:
#!/bin/bash
echo "Processing file ${1?missing input file}"
你可以执行以下操作
find /path/to/inputfiles -name "*.txt" -exec /path/to/myprogram.sh {} \; > Out.txt
或者在 bash(或任何类似 Bourne 的 shell)中:
for i in *.txt; do /path/to/myprogram.sh "$i"; done > Out.txt
(我使用 for 循环或 find 是因为如果你有 1000 个输入文件而不是示例中的 4 个文件,它会方便得多)
答案3
与 Per 的答案非常相似,但保留了原始的布局:
{
./myprogram 1.txt
./myprogram 2.txt
./myprogram 3.txt
./myprogram 4.txt
} > Out.txt
http://www.gnu.org/software/bash/manual/bashref.html#Command-Grouping
答案4
我发现这个解决方案更优雅:
FILE=/tmp/file.log
exec >> $FILE
./myprogram 1.txt
./myprogram 2.txt
./myprogram 3.txt
./myprogram 4.txt
exec 1<&2
echo 'Normal output has returned!'