AWK计数/排序/唯一audit.log CentOS 7

时间:2015-10-13 21:08:57

标签: regex linux bash apache awk

我不熟悉awk,我不知道从哪里开始..基本上我试图从/var/log/audit/audit.log提取特定数据的数据是ip地址,但它们必须是唯一的,意味着不重复,它们必须进行排序,我需要计算出现次数。这一切都可以一步到位吗?我想在html中创建一个双列表,其中一方有ip地址,而另一方有出现次数。

这是我到目前为止的awk命令..

cat audit.log | awk '
    {
        match($0, /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/)
        ip = substr($0, RSTART, RLENGTH)
        print ip
    }
'

这个命令只打印出一百万个ip地址,有人可以帮帮我吗?我和awk混淆了。

以下是sshd守护程序使用的audit.log文件的示例:

    exe="/usr/sbin/sshd" hostname=10.10.125.30 addr=45.60.145.130 terminal=ssh res=success'
    type=USER_LOGOUT msg=audit(1444401905.624:127): pid=1862 uid=0 auid=0 ses=1 msg='op=login id=0 exe="/usr/sbin/sshd" hostname=102.10.145.130 addr=45.20.120.10 terminal=ssh res=success'
    type=USER_LOGIN msg=audit(1444401905.627:128): pid=1862 uid=0 auid=0 ses=1 msg='op=login id=0 exe="/usr/sbin/sshd" hostname=102.30.145.130 addr=45.60.45.120 terminal=ssh res=success'
    type=USER_START msg=audit(1444401905.627:129): pid=1862 uid=0 auid=0 ses=1 msg='op=login id=0 exe="/usr/sbin/sshd" hostname=102.60.145.130 addr=108.60.145.130 terminal=ssh res=success'
    type=CRYPTO_KEY_USER msg=audit(1444401905.629:130): pid=18799 uid=0 auid=0 ses=1 msg='op=destroy kind=server fp=93:e4:a2:20:d9:41:44:1b:8a:ee:53:d8:c3:d5:06:27 direction=? spid=18799 suid=0  exe="/usr/sbin/sshd" hostname=? addr=108.60.145.130 terminal=? res=success'
    type=CRYPTO_KEY_USER msg=audit(1444401905.629:131): pid=18799 uid=0 auid=0 ses=1 msg='op=destroy kind=server fp=f7:07:aa:ec:70:56:0f:e9:a9:24:25:97:53:4c:fb:1f direction=? spid=18799 suid=0  exe="/usr/sbin/sshd" hostname=? addr=18.20.125.130 terminal=? res=success'

thanks

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方式:

awk '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/); ip = substr($0,RSTART,RLENGTH); print ip}' audit.log|sort -u

您的示例输出:

10.10.125.30
102.10.145.130
102.30.145.130
102.60.145.130
108.60.145.130
18.20.125.130