bashを使用してファイルを1行ずつ追加しますか?

bashを使用してファイルを1行ずつ追加しますか?

現在、私は結合されたファイルに内容を追加するために複数行を使用しています。

./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!'

関連情報