从文件中提取信息以输出,文件名由逗号连接和分隔

从文件中提取信息以输出,文件名由逗号连接和分隔

我有一些包含多个文件的目录,扩展名为 .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

提前致谢,

答案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

相关内容