1

我有一个像这样行的文件:

Internet Protocol Version 4, Src: 192.168.0.29 (192.168.0.29), Dst: www.l.google.com (64.233.187.104)
    Time to live: 128
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0\r\n

如果我使用 $NF 我最终得到:

rv:1.7.5)

但我想要:

Firefox/1.0

我想在下面制作我的脚本:

awk '
    /    User-Agent/{brow=$NF}
    END{
        print brow;
    }
'

任何建议,将不胜感激!

完整脚本:(固定)

#!/bin/bash
echo $1;
awk '/    User-Agent/{print}' $1 > useragents_$1;
echo '----------------------------------------------------' >> useragents_$1;
sort useragents_$1 | uniq >> useragents_$1;
awk '
    /Internet Protocol Version 4, Src:/{ip=$(NF-4)}
    /    Time to live/{ttl++}
    /    Time to live/{sttl=$NF}
    /    User-Agent/{os=$(NF-6)" "$(NF-5)}
    /    User-Agent/{brow=$NF}
    /    User-Agent/{agent++}
    /    User-Agent/{stringtemp=sttl"\t"ip"\t"os"\t"brow}
    /Windows/{windows++}
    /Linux/{linux++}
    /Solaris/{solaris++}
    END{
        sub(/\\r.*$/, "", brow);
        print "TTL\tIP\t\tOS\t\tBROWSER";
        print stringtemp;
        print "\nSUMMARY";
        print "\tttl\t=\t"ttl; print "\twindows\t=\t"windows;
        print "\tlinux\t=\t"linux; print "\tsolaris\t=\t"solaris;
        print "\tagent\t=\t"agent
    }
' $1 > useragents_$1;
more useragents_$1;

输出:

examplehttppacket.txt
TTL     IP              OS              BROWSER
128     192.168.0.29    Windows NT      Firefox/1.0\r\n

SUMMARY
        ttl     =       1
        windows =       3
        linux   =
        solaris =
        agent   =       1

感谢大家的帮助,看起来主要是文本文件问题!

4

4 回答 4

2

这个 awk 应该可以工作:

awk '/User-Agent/{brow=$NF} END{sub(/\\r.*$/, "", brow); print brow;}' file
于 2013-08-06T21:27:57.920 回答
1

如果我假设您的示例脚本有错字(即,您的意思是/User-Agent/,没有前导空格),那么给定这个输入文件:

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0

这个脚本:

awk '
    /User-Agent/{brow=$NF}
    END{
        print brow;
    }
'

然后我得到这个输出:

Firefox/1.0

这似乎正是你想要的。如果您看到不同的行为,请使用有关您的操作系统的信息以及演示问题的实际输入和实际输出示例更新您的问题。

于 2013-08-06T21:17:39.000 回答
1
awk '/User-Agent/{brow=$NF}; END{print brow;}' file_name

工作正常。

于 2013-08-06T21:17:53.643 回答
1

我想首先要尝试的是删除\r字符

awk '
    {gsub(/^M/, "", $0)}
    /    User-Agent/{brow=$NF}
    END{
        print brow;
    } file

如果使用 VI(M) 编辑器,输入 Ctrl-M(上面的^M)作为一个字符,并使用vi(m)s 转义字符功能,按 Ctrl-V(然后)Ctrl-M。

IHTH

于 2013-08-06T21:23:47.450 回答