仅查找并打印重复字段

仅查找并打印重复字段
Address                  HWtype  HWaddress           Flags Mask       Iface
192.168.142.223          ether   00:50:56:f5:0a:e7   C                     eth0
192.168.142.254          ether   00:50:56:f5:0a:z7   C                     eth0
192.168.142.253          ether   00:50:56:f5:0a:w7   C                     eth0
192.168.142.230          ether   00:50:56:f5:0a:dc   C                     eth0
192.168.142.249          ether   00:50:56:f5:0a:b7   C                     eth0
192.168.142.252          ether   00:50:56:f5:0a:d8   C                     eth0
192.168.142.254          ether   00:50:56:f5:0a:a1   C                     eth0
_gateway                 ether   00:50:56:f0:dd:44   C                     eth0

我有这样的文本文件,我的目的是打印其第一个字段相同的文件。

例如

 192.168.142.254          ether   00:50:56:f5:0a:z7   C     eth0
 192.168.142.254          ether   00:50:56:f5:0a:a1   C     eth0

我的解决方案是这样的。

 1- cat a |awk '{print $1," ",$3}' |grep $(cat a |awk '{print $1}' |sort |uniq -d) 
 2- cat a |awk '{print $3," ",$1}' |sort -k 2|uniq -f 1 -D

所以我很好奇,还有其他方法吗? (也许只使用 awk 命令)我只想使用 bash 命令。

答案1

在每个 UNIX 机器的任何 shell 中使用任何 awk 并输入任何内容:

$ awk 'NR==FNR{cnt[$1]++; next} cnt[$1]>1' file file
192.168.142.254          ether   00:50:56:f5:0a:z7   C                     eth0
192.168.142.254          ether   00:50:56:f5:0a:a1   C                     eth0

答案2

尝试这个,

grep "^$(awk 'seen[$1]++ == 1 {print $1}' a)\b" a
192.168.142.254          ether   00:50:56:f5:0a:z7   C                     eth0
192.168.142.254          ether   00:50:56:f5:0a:a1   C                     eth0

或者

grep "^$(awk 'seen[$1]++ == 1 {gsub(/\./,"\\."); print $1}' a)\b" a

相关内容