Findの結果を取得し、awkを実行して最初の2列を出力しようとしています。次に、既存のファイル名に名前に追加のサフィックスを追加して、それらの結果を各ファイルの新しいファイル名にリダイレクトします。元のソースがfile.txtとして残っているディレクトリ内のファイルと、file-new.txtという名前の新しいファイル
例えば:
find -type f -iname "*.txt" -exec awk '{print $1, $2}' {} \;
これを行うには何を追加する必要がありますか? sedを使用する方が良いでしょうか?
最も簡単な方法は、awkの出力リダイレクトを使用することです。 Awk出力リダイレクトは単純なケースで非常に使いやすくなっています。リダイレクトが初めて使用されるときにファイルが開かれ、同じファイル名への後続のリダイレクトでは既存のファイル記述子が使用されます。
ファイル名にサフィックスを追加したい場合は、次のように簡単です。
find -type f -iname "*.txt" -exec awk '{print $1, $2 >(FILENAME "-new")}' {} +
ただし、ファイル名をさらに複雑に変換できます(ここでは、各入力ファイルの最初の行でのみ再計算されます)。
find -type f -iname "*.txt" -exec awk '
FNR==1 {out=FILENAME; sub(/\.[^.]*$/, "-new&", out) || out = out "-new"}
{print $1, $2 >out}
' {} +