2013-07-25 66 views
0

我有一個包含這樣的事情AWK得到的字符串和引用字符串

Mar 19 07:00:32 192.168.100.58 DefensePro: 21-11-2010 09:31:18 WARNING 150 HttpFlood "HTTP Page Flood Attack" TCP 0.0.0.0 0 192.168.100.6 0 0 Regular "File Server" term 0 0 N/A 0 N/A medium forward XXXXXXXX-XXXX-XXXX-18CE-2222B3148BBC 

我怎樣才能獲得特定的字符串(用awk或NAWK)日誌文件,變成這個樣子:

Mar 19 07:00:32,192.168.100.58,HTTP Page Flood Attack,192.168.100.6,medium 

由於

+0

是否可以從日誌文件發佈更多的數據? –

+0

'awk'將輸入數據(默認情況下),你打算創建一個逗號分隔的輸出,可以通過設置'OFS'變量來實現 由於你的日誌沒有分隔符,你必須確定你想要捕獲哪些字段,但是,這個是一種脆弱的方法,因爲如果您的日誌在不同的行上有額外的數據,它會中斷。 –

回答

0

你可以試試這個

awk '{j = 0;for(i=1;i<NF;i++){if(i == 11 && index($i,"\"") > 0){printf(",%s",$i);i++;while(index($i,"\"") == 0){printf(" %s",$i);i++;}printf(" %s",$i);j=i;}else if(i < 5 || i == (j+4) || i == (NF - 2)){printf(",%s",$i);}}}' 

邏輯是我打印領域直到5,從字段11「開始我打印字段,直到下一個」來。我存儲在那裏我們得到了最後的「爲J的位置。然後,我打印領域J + 4和倒數第二場

0
$ awk -F\" '{ 
    split($1,a,/ /) 
    split($3,b,/ /) 
    split($5,c,/ /) 
    printf "%s %s %s,%s,%s,%s,%s\n",a[1],a[2],a[3],a[4],$2,b[5],c[8] 
}' file 
Mar 19 07:00:32,192.168.100.58,HTTP Page Flood Attack,192.168.100.6,medium