ファイル名の文字列を出力ファイルにインポートし、同じファイル内の文字列もインポートします。

ファイル名の文字列を出力ファイルにインポートし、同じファイル内の文字列もインポートします。

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

file1_string2_1。失敗:

FHEAD|string2|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つの文字列をカンマ区切りの出力ファイルに抽出する必要があります。また、この出力ファイルにファイル名とstring2を抽出する必要があります。 string2 はファイル名または FHEAD タグで使用できます。

予想出力:

file1_string2_1.failed,string2,150001021,20170109121206
file1_string2_1.failed,string2,150001022,20170109012801
file2_string2_1.failed,string2,150001023,20170109100904
file2_string2_2.failed,string2,150001024,20170109031206
file2_string2_3.failed,string2,150001025,20170109081207
file3_string2_1.failed,string2,150001026,20170109141203
file3_string2_2.failed,string2,150001027,20170109121208
file4_string2_1.failed,string2,150001028,20170109171206

今、次のコマンドがあります。

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

私が得た結果は次のとおりです。

file1_string2_1.failed,150001021
file1_string2_1.failed,150001022
file2_string2_1.failed,150001023
...

答え1

下線で区切られたフィールドに分割し、FILENAME結果を配列に入れることができます。

split(FILENAME,a,"_")

print次に、ステートメントに必要な要素を追加します。

print FILENAME, a[2], $2, $3

だから

awk -F'|' '$1 == "THEAD" {split(FILENAME,a,"_"); print FILENAME, a[2], $2, $3}' OFS=, *.failed > failed_transactions.out

関連情報