出力のためにファイルから情報を抽出します。ファイル名はコンマで連結して区切ります。

出力のためにファイルから情報を抽出します。ファイル名はコンマで連結して区切ります。

複数のファイルを含むいくつかのディレクトリがあり、拡張子が.failedのファイルの数は毎日変わります。ファイルの形式は次のとおりです。

ファイル 1. 失敗:

FHEAD|4525|20170109000000|20170125024831
THEAD|150001021|20170109121206||
TDETL|4000785067||1|EA|||RETURN|||N
TTAIL|1
THEAD|150001022|20170109012801||
TDETL|4000804525||1|EA|||RETURN|||N
TTAIL|1
FTAIL|6

THEAD |と| 2の間のすべてのテキストを出力ファイルに抽出する必要があります。以下を試していますが、ディレクトリにファイルが1つしかない場合にのみ機能します。

sed -n 's:.*THEAD|\(.*\)|2.*:\1:p' <*.failed >transactions.log

出力は次のとおりです。transaction.log:

150001021
150001022

これで、複数のファイルに対して同じことをどのように実行できますか? (ファイル数は未確認)。

また、次のように出力ファイルの各行にファイル名を追加できますか?

予想出力:

file1.failed,150001021
file1.failed,150001022
file2.failed,150001023
file2.failed,150001024
file2.failed,150001025
file2.failed,150001026
file3.failed,150001027
file3.failed,150001028

よろしくお願いします。

ベストアンサー1

gawkおよびでテスト済みmawk

awk -F'|' '$1 == "THEAD" {print FILENAME, $2}' OFS=, file*.failed > transactions.log

cat transactions.log 
file1.failed,150001021
file1.failed,150001022
file2.failed,150001023
file2.failed,150001024
file3.failed,150001025
file3.failed,150001026

おすすめ記事