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 시스템의 모든 쉘에서 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