回答:
できるよ:
for f in *.txt; do (cat "${f}"; echo) >> finalfile.txt; done
finalfile.txt
上記のコマンドを実行する前に、ファイルが存在しないことを確認してください。
使用が許可されているawk
場合は、次のことができます。
awk 'FNR==1{print ""}1' *.txt > finalfile.txt
AWK '{print $0}' *.txt
awk 'FNR==1 && NR > 1 ...'
代わりに、これで簡単にこれを防ぐことができます。
>finalfile.txt
後に置く場合はdone
、追加する代わりに上書きできます。これにより、ループの前にファイルが欠落しているか空であることを確認する必要がなくなります。
リストできるファイルが少ない場合は、Bashでプロセス置換を使用して、ファイルの各ペアの間に改行を挿入できます。
cat File1.txt <(echo) File2.txt <(echo) File3.txt > finalfile.txt
私がそれをやったのなら、sedを使用します。
sed -e '$s/$/\n/' -s *.txt > finalfile.txt
このsedパターンでは、$には2つの意味があります。1つ目は(パターンを適用する行の範囲として)最後の行番号のみに一致し、2つ目は置換パターンの行の終わりに一致します。
sedのバージョンに-s
(入力ファイルを個別に処理する)がない場合は、ループとしてすべて実行できます。
for f in *.txt ; do sed -e '$s/$/\n/' $f ; done > finalfile.txt
sed -s '$G' *.txt > finalfile.txt
find
、の代わりに使用したため、PCがクラッシュしました*.txt
。つまり、ファイルがそれ自体に追加されました。
これはバッシュで動作します:
for f in *.txt; do cat $f; echo; done
>>
(追加)による回答とは異なり、このコマンドの出力は他のプログラムにパイプすることができます。
例:
for f in File*.txt; do cat $f; echo; done > finalfile.txt
(for ... done) > finalfile.txt
(括弧はオプションです)for ... done | less
(少ないへのパイプ)for ... done | head -n -1
(これにより、末尾の空白行が削除されます)Pythonでは、これはファイル間の空白行と連結します(,
余分な末尾の空白行の追加を抑制します):
print '\n'.join(open(f).read() for f in filenames),
シェルから呼び出すことができ、出力をファイルに出力する醜いpythonワンライナーは次のとおりです。
python -c "from sys import argv; print '\n'.join(open(f).read() for f in argv[1:])," File*.txt > finalfile.txt