Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 选择行时awk中的条件_Linux_Shell_Awk - Fatal编程技术网

Linux 选择行时awk中的条件

Linux 选择行时awk中的条件,linux,shell,awk,Linux,Shell,Awk,抱歉,如果标题不是最好的。让我解释一下,也许这会有所帮助: 我选择了一个带有“用户代理”的行,我想取$(NF-6)和$(NF-5),但在某些情况下,该行没有那么多的令牌,因此我想做一些类似于我在下面列出的事情: if (/User-Agent/$(NF-6)>0) / User-Agent/{os=$(NF-6)" "$(NF-5)} else / User-Agent/{os=$NF)} 我使用的语法肯定是错误的,我得到: awk: cmd. line:5:

抱歉,如果标题不是最好的。让我解释一下,也许这会有所帮助:

我选择了一个带有“用户代理”的行,我想取$(NF-6)和$(NF-5),但在某些情况下,该行没有那么多的令牌,因此我想做一些类似于我在下面列出的事情:

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;

只需像这样比较NF变量,以确保有许多字段可用:

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