如何使用awk解析具有多种记录类型的文件
要使用如何使用awk解析具有多种记录类型的文件,awk,gawk,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 435
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等效格式读取的数据
??你的目标并不完全清楚,但这里有一些东西可以作为一个开始。根据需要,将
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
谢谢,我让它工作了。基本上,我在TX/RX类型字段上创建了一个状态机解码。它们吐出N个额外的记录,这些记录可以是baudot格式,其中只包含十六进制值。目标是将这些十六进制值转换为ascii格式。我使用查找表来完成它。