我已经处理了一个访问日志:
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?
答案 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