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