在列中查找重复值,删除一行

时间:2013-04-30 10:56:08

标签: perl sed awk

匹配第一列没有问题,但这没有帮助。

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 个答案:

答案 0 :(得分:4)

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

$ 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

答案 1 :(得分:2)

Perl解决方案:

perl -F: -ane 'print unless $seen{$F[3]}++'

答案 2 :(得分:1)

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

awk '{key=$(NF-5) $(NF-4) $(NF-3) $(NF-2) $(NF-1) $NF} !x[key]++' file

答案 3 :(得分: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