2013-03-13 83 views
2

想要使用awk來處理輸入文件。有多個記錄類型由傳入記錄中的一個字段表示。當記錄類型包含特定值時,我需要處理當前包含特定於此類記錄的數據的N個附加記錄。如何使用awk解析多種記錄類型的文件

這是可行的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等效。

??

回答

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 
+0

THX,我得到了它加工。基本上,我在TX/RX類型字段中創建了一個狀態機解碼。他們吐出N個附加記錄,這些附加記錄可以是隻包含十六進制值的baudot格式。目標是將這些十六進制值轉換爲ASCII格式。我用查找表來實現它。 – 2013-03-14 02:10:12