2013-08-07 81 views
1

对不起,如果标题不是最大的。让我解释一下,也许这将有所帮助:有条件的在awk中选择一条线

我正在选择一个带有“User-Agent”的行,我想要花费$(NF-6)和$(NF-5),但在某些情况下,行不会“T有很多记号,所以我想这样做我把下面:

if (/User-Agent/$(NF-6)>0) 
    / User-Agent/{os=$(NF-6)" "$(NF-5)} 
else 
    / User-Agent/{os=$NF)} 

我使用的语法肯定是不对的,我得到:

awk: cmd. line:5:  if (/User-Agent/$(NF-6)>0) 
awk: cmd. line:5: ^syntax error 
awk: cmd. line:7:  else 
awk: cmd. line:7: ^syntax error 

任何援助将不胜感激!


整个脚本,如果有帮助:

#!/bin/bash 
echo $1; 
awk ' 
    /Internet Protocol Version 4, Src:/{ip=$(NF-4)} 
    / Time to live/{ttl++} 
    / Time to live/{sttl=$NF} 
    if (/User-Agent/$(NF-6)>0) 
     / User-Agent/{os=$(NF-6)" "$(NF-5)} 
    else 
     / User-Agent/{os=$NF)} 
    / User-Agent/{brow=$NF} 
    / User-Agent/{agent++} 
    / User-Agent/{stringtemp=sttl"\t"ip"\t"os"\t"brow} 
    / User-Agent/{string=(string)"\n"(stringtemp)} 
    /Windows;/{windows++} 
    /Linux;/{linux++} 
    /Solaris;/{solaris++} 
    /No.  Time  Source    Destination   Protocol Length Info/{count++} 
    END{ 
     sub(/\\r.*$/, "", brow); 
     print "("count")" > "temp"; 
     print "TTL\tIP\t\tOS\t\tBROWSER"; 
     print string; 
     print "\nSUMMARY\n\tttl\t=\t"ttl"\n\twindow\t=\t"windows/2"\n\tlinux\t=\t"linux/2"\n\tsolaris\t=\t"solaris/2 >> "temp"; 
    } 
' $1 > summary_$1; 
sort -k2n summary_$1 | uniq > holder; 
cat temp > useragents_$1; 
cat holder >> useragents_$1; 
more useragents_$1; 

回答

2

只是比较NF变量像这样以确保许多字段:

awk '/User-Agent/ && NF > 6 {...}' 
+1

太感谢你了! – Hans