現在、私は結合されたファイルに内容を追加するために複数行を使用しています。
./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行に置き換えることができますか?
答え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に似たシェル)から:
for i in *.txt; do /path/to/myprogram.sh "$i"; done > Out.txt
(例では、4つのファイルの代わりに1000の入力ファイルがある場合ははるかに便利ですので、forループやfindを使用しています。)
答え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!'