如何使用awk解析具有多种记录类型的文件

时间:2013-03-13 15:32:28

标签: awk gawk

想要使用awk处理输入文件。有多种记录类型由传入记录中的一个字段表示。当记录类型包含特定值时,我需要处理当前包含特定于此类记录的数据的N个附加记录。

这适用于awk吗?

以下是传入文件格式的示例:

 1 [001:01.0] [ 2] IOCTL 048477589
...
...
28 [002:02.0] [ 2] TX(56)
        81480d0d 0a524141 435a5955 5705243  .H...RAACZYW RC
        43544848 41303033 32203034 3032325  CTHHA0032 04025
        332d4343 43432d2d 52435554 4848412  3-CCCC--RCETHHA

因此,基本上,当找到TX类型记录时,读取下一个N记录处理 数据,以十六进制和ASCII等效读取。

...

1 个答案:

答案 0 :(得分:2)

目标并不完全清楚,但这里可以作为一个起点。根据需要,用更实质的处理替换print语句。

awk '
/^[ 0-9][0-9] / {
    # This is a record header line. Check if it is a TX.
    inTx = ($0 ~ / TX\([0-9]*\)$/);
    if (inTx) {
        print "Start of TX record.";
        next; # Avoid printing the header line below.
    }
}
inTx { print "TX:", $0; }
' file.txt

这是一个稍微强大的示例文件,以使脚本更清楚:

 1 [001:01.0] [ 2] IOCTL 048477589
...
...
28 [002:02.0] [ 2] TX(56)
        81480d0d 0a524141 435a5955 5705243  .H...RAACZYW RC
        43544848 41303033 32203034 3032325  CTHHA0032 04025
        332d4343 43432d2d 52435554 4848412  3-CCCC--RCETHHA
 1 [001:01.0] [ 2] IOCTL 048477589
 2 [dsfsdsdf] [ 2] BLORT
29 [002:02.0] [ 2] TX(77)
        abbababa 0a524141 435a5955 5705243  STUFFSTUFFSTUFF
        43544848 bbbbbbbb 32203034 d0d0d0d  CTHULUCTHULUCTH
        332d4343 43432d2d cccccccc 4848412  BLORTZORCHFNORD
 1 [001:01.0] [ 2] IOCTL 048477589
 2 [dsfsdsdf] [ 2] BLORT

运行脚本的脚本:

Start of TX record.
TX:         81480d0d 0a524141 435a5955 5705243  .H...RAACZYW RC
TX:         43544848 41303033 32203034 3032325  CTHHA0032 04025
TX:         332d4343 43432d2d 52435554 4848412  3-CCCC--RCETHHA
Start of TX record.
TX:         abbababa 0a524141 435a5955 5705243  STUFFSTUFFSTUFF
TX:         43544848 bbbbbbbb 32203034 d0d0d0d  CTHULUCTHULUCTH
TX:         332d4343 43432d2d cccccccc 4848412  BLORTZORCHFNORD