AWK获取字符串和带引号的字符串

AWK获取字符串和带引号的字符串,awk,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-2222B3148B

我有一个日志文件,其中包含如下内容

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
谢谢你可以试试这个

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);}}}'

awk'{j=0;对于(i=1;我能从日志文件中发布更多数据吗?
awk
在空格上拆分输入数据(默认)。您打算创建一个逗号分隔的输出,这可以通过设置
OFS
变量来实现。由于日志没有分隔符,因此您必须标识要捕获的字段。但是,这是一种脆弱的方法,因为如果日志在不同的行上有其他数据,它将中断。
$ 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