0

匹配第一列没有问题,但这无济于事。

awk '!(x[$(1)]++)' List.txt

我想在文件中搜索重复的 mac 地址,最后 6 列(或 1?)。如果找到匹配项,则打印删除匹配项。

 q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.31 = Hex-STRING: 00 1B 90 67 B7 C0 
 q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.36 = Hex-STRING: 00 13 60 FC 51 40
 q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.33 = Hex-STRING: 00 12 D9 18 66 C0 
 q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.34 = Hex-STRING: 00 13 C3 82 35 C0 
 q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.35 = Hex-STRING: 00 13 60 B3 76 40 
 q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.36 = Hex-STRING: 00 13 60 FC 51 40 

期望的结果。

 q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.31 = Hex-STRING: 00 1B 90 67 B7 C0 
 q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.36 = Hex-STRING: 00 13 60 FC 51 40 
 q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.33 = Hex-STRING: 00 12 D9 18 66 C0 
 q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.34 = Hex-STRING: 00 13 C3 82 35 C0 
 q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.36 = Hex-STRING: 00 13 60 FC 51 40
4

4 回答 4

4

设置FS:使这变得简单,第四列是使用此的 MAC 地址FS

$ awk -F':' '{print $4}' file
 00 1B 90 67 B7 C0 
 00 13 60 FC 51 40
 00 12 D9 18 66 C0 
 00 13 C3 82 35 C0 
 00 13 60 B3 76 40 
 00 13 60 FC 51 40 

只需编辑您的脚本以处理$4唯一值:

$ awk -F':' '!a[$4]++' file
 q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.31 = Hex-STRING: 00 1B 90 67 B7 C0
 q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.36 = Hex-STRING: 00 13 60 FC 51 40
 q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.33 = Hex-STRING: 00 12 D9 18 66 C0
 q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.34 = Hex-STRING: 00 13 C3 82 35 C0
 q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.35 = Hex-STRING: 00 13 60 B3 76 40
于 2013-04-30T10:58:07.147 回答
2

Perl 解决方案:

perl -F: -ane 'print unless $seen{$F[3]}++'
于 2013-04-30T11:08:17.740 回答
1

对于 awk 解决方案,您只需要定义一个适当的数组键

awk '{key=$(NF-5) $(NF-4) $(NF-3) $(NF-2) $(NF-1) $NF} !x[key]++' file
于 2013-04-30T15:02:45.417 回答
0

它有一个排序的(按 MAC 地址)输出

sort -ut: -k4<<EOT
q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.31 = Hex-STRING: 00 1B 90 67 B7 C0 
q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.36 = Hex-STRING: 00 13 60 FC 51 40
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.33 = Hex-STRING: 00 12 D9 18 66 C0 
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.34 = Hex-STRING: 00 13 C3 82 35 C0 
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.35 = Hex-STRING: 00 13 60 B3 76 40 
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.36 = Hex-STRING: 00 13 60 FC 51 40
EOT

输出

q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.33 = Hex-STRING: 00 12 D9 18 66 C0 
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.35 = Hex-STRING: 00 13 60 B3 76 40 
q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.36 = Hex-STRING: 00 13 60 FC 51 40
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.34 = Hex-STRING: 00 13 C3 82 35 C0 
q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.31 = Hex-STRING: 00 1B 90 67 B7 C0

或者您可以使用 IP 地址排序输出

sort -ut: -k4<<EOT|sort -t: -k3
q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.31 = Hex-STRING: 00 1B 90 67 B7 C0 
q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.36 = Hex-STRING: 00 13 60 FC 51 40
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.33 = Hex-STRING: 00 12 D9 18 66 C0 
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.34 = Hex-STRING: 00 13 C3 82 35 C0 
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.35 = Hex-STRING: 00 13 60 B3 76 40 
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.36 = Hex-STRING: 00 13 60 FC 51 40
EOT

输出:

q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.31 = Hex-STRING: 00 1B 90 67 B7 C0 
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.33 = Hex-STRING: 00 12 D9 18 66 C0 
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.34 = Hex-STRING: 00 13 C3 82 35 C0 
q-r21 RFC1213-MIB::atPhysAddress.1.1.10.6.2.35 = Hex-STRING: 00 13 60 B3 76 40 
q-r20 RFC1213-MIB::atPhysAddress.1.1.10.6.2.36 = Hex-STRING: 00 13 60 FC 51 40
于 2013-04-30T11:13:59.967 回答