2014-09-01 49 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