Awk
從文件名獲取字元串到輸出文件加上同一文件內的字元串
我有一些目錄,其中包含多個副檔名為 .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。請注意,可以從文件名或 FHEAD 標記中使用 string2。
預期輸出:
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 ...
您可以拆分
FILENAME
為下劃線分隔的欄位並將結果放入數組中split(FILENAME,a,"_")
之後,只需將所需的元素添加到
print FILENAME, a[2], $2, $3
所以
awk -F'|' '$1 == "THEAD" {split(FILENAME,a,"_"); print FILENAME, a[2], $2, $3}' OFS=, *.failed > failed_transactions.out