0

我有一个包含类似内容的日志文件

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

谢谢

4

2 回答 2

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
于 2013-07-25T08:19:36.310 回答
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 和最后一个但第二个字段

于 2013-07-25T04:30:59.100 回答