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