다음과 유사한 목록이 있습니다.
192.168.2.1 sometext.com
192.168.2.1
192.168.2.3
192.156.1.6
192.156.1.6 moretext.com
192.123.1.1
192.564.7.3
192.564.7.3 hello.com
필요한 출력은 다음과 같습니다.
192.168.2.1 sometext.com
192.168.2.3
192.156.1.6 moretext.com
192.123.1.1
192.564.7.3 hello.com
호스트 이름이 없는 IP를 삭제하고 싶습니다.~하지 않는 한호스트 이름이 포함된 줄이 이미 있습니다.
위의 예를 참조하세요.
괜찮나요?
답변1
awk
해결책 은 다음과 같습니다 (출력 순서는 중요하지 않다고 가정합니다).
awk '!seen[$1]{ seen[$1]=$0; next } $2!=""{ seen[$1]=$0 }
END{ for (x in seen) print seen[x] }' infile
seen
여기서는 및 키 인덱스로 명명된 연관 배열을 정의합니다 $1
. 따라서 배열에 없는 IP인 첫 번째 열의 키를 확인한 다음 해당 키 값에 !seen[$1]
전체 행을 추가 하고 읽 습니다. 그렇지 않은 경우(IP는 이전에 확인되었으며 배열에 존재함) 다음 행에 동일한 IP가 있고 호스트 이름이 있는 경우 해당 키의 값을 현재 행 값으로 업데이트합니다.$0
next
마지막에는 x
배열 인덱스로 처리되는 변수를 사용하여 배열을 반복하고 해당 키의 값을 인쇄합니다.