열별로 목록 정렬

열별로 목록 정렬

다음과 유사한 목록이 있습니다.

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가 있고 호스트 이름이 있는 경우 해당 키의 값을 현재 행 값으로 업데이트합니다.$0next

마지막에는 x배열 인덱스로 처리되는 변수를 사용하여 배열을 반복하고 해당 키의 값을 인쇄합니다.

관련 정보