Grep / awkは複数のファイルを単一の出力に変換します。

Grep / awkは複数のファイルを単一の出力に変換します。

grep現在のテキスト文字列を検索し、awk必要な変数をフィルタリングするために使用するデータを含むいくつかのtxtファイルがあります。文字列がファイル内で繰り返されるので、現在このコマンドを使用して目的の文字列を抽出しています。

grep 'text' *.txt | awk ' NR==1  {print $2 } ' > outputfile

問題は、フォルダ内の複数のファイルを繰り返し、抽出された変数を各ファイルの単一の出力ファイルに書きたいということです。この質問に対する回答は以前にすでに回答されていることがわかっていますが、これは初めてであり、実装するのが困難です。

どんなフィードバックでも大変感謝します!

ベストアンサー1

各反復の出力を別の出力ファイルにリダイレクトできるように、各ファイルのファイル名を保持しながらbash内のファイルを繰り返します。

たとえば、次のようになります(テストされていません)。

PREFIX="/tmp/outputs"   # define where to store all the outputs
mkdir -p "${PREFIX}"    # make sure the outputs dir exists

for FILE in *.txt       # get the file names you want to work on
do
  # use ${PREFIX}/${FILE} to redirect output to a 
  # file that's associated with the input
  grep 'text' "${FILE}" | awk ' NR==1 {print $2 } ' > "${PREFIX}/${FILE}"
done

おすすめ記事