Shell

從文件中提取資訊到輸出,文件名用逗號連接和分隔

  • January 25, 2017

我有一個包含多個文件的目錄,副檔名為 .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 到輸出文件。我正在嘗試以下方法,只有當我在目錄中只有一個文件時它才有效。

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

輸出為:transactions.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

提前致謝,

(用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

引用自:https://unix.stackexchange.com/questions/340174