2014-09-01 93 views
0

我已经处理的访问日志有:多个端口上找到MAC adressess

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 

如何打印在多台发现所有MAC端口(在本例中)第1-2行和第5-6行?

+1

你是什么意思的多个端口? – 2014-09-01 07:17:33

+0

发布一些'testlog'和你喜欢的东西。 – Jotne 2014-09-01 07:23:28

+0

:)星期一上午,完全睡着了 多个独特的端口。即在端口3:37和3:39发现MAC(01:03:96:51:9A:31)。 – 2014-09-01 07:25:43

回答

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 
+0

这不会起作用,因为每条线在开始时都有一个新号码。也许尝试像'awk -F。 '!x [$ 2] ++'文件' – 2014-09-01 08:01:54

+0

@Jidder我会猜测OP只是添加了行号。这就是为什么我确实要求他用日志数据更新帖子。 – Jotne 2014-09-01 08:36:00

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 
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