在多个端口上找到的MAC地址

时间:2014-09-01 07:14:53

标签: awk sed

我已经处理了一个访问日志:

grep -o -w -E '[[:alnum:]:]{17}.*[0-9]' testlog | awk '{print $1 " " $3}'

导致以下结果(混淆)

1.01:03:96:51:9A:31 3:37
2.01:03:96:51:9A:31 3:39
3.00:E0:2B:00:00:01 3:39
4.3C:A9:F4:1C:68:A4 3:37
5.01:01:96:51:A6:5E 3:39
6.01:01:96:51:A6:5E 3:39

如何打印多个端口(在示例中)1-2和5-6行中找到的所有MAC?

3 个答案:

答案 0 :(得分:0)

如果您有此输入:

cat file
01:03:96:51:9A:31 3:37
01:03:96:51:9A:31 3:39
00:E0:2B:00:00:01 3:39
3C:A9:F4:1C:68:A4 3:37
01:01:96:51:A6:5E 3:39
01:01:96:51:A6:5E 3:39

你可以做到

awk '!seen[$0]++' file
01:03:96:51:9A:31 3:37
01:03:96:51:9A:31 3:39
00:E0:2B:00:00:01 3:39
3C:A9:F4:1C:68:A4 3:37
01:01:96:51:A6:5E 3:39

awk '!seen[$0]++' file | sort -k2
01:03:96:51:9A:31 3:37
3C:A9:F4:1C:68:A4 3:37
00:E0:2B:00:00:01 3:39
01:01:96:51:A6:5E 3:39
01:03:96:51:9A:31 3:39

答案 1 :(得分:0)

你需要这样吗?

awk '{ seen[$1]++; } END{ for(idx in seen){ if(seen[idx] != 1 ) print idx }}' file

输入文件:

01:03:96:51:9A:31 3:37
01:03:96:51:9A:31 3:39
00:E0:2B:00:00:01 3:39
3C:A9:F4:1C:68:A4 3:37
01:01:96:51:A6:5E 3:39
01:01:96:51:A6:5E 3:39

输出:

$ awk '{ seen[$1]++; } END{ for(idx in seen){ if(seen[idx] != 1 ) print idx }}' file
01:01:96:51:A6:5E
01:03:96:51:9A:31

答案 2 :(得分:0)

如果你使用awk,你永远不需要grep。你没有显示原始testlog的样子,虽然这可能会产生你想要的输出,但它可能不是最好的方法,因为它只是使用你的grep中的逻辑但是可能有一个更好的方式在awk:

awk '
match($0,/[[:alnum:]:]{17}.*[0-9]/) {
    ip = substr($0,RSTART,RLENGTH)
    print ip
    sub(/ .*/,"",ip)
    count[ip]++
}
END {
    for (ip in count) {
        if (count[ip] > 1) {
            printf "IP %s occurs %d times\n", ip, count[ip] | "cat>&2"
        }
    }
}
' testlog