일치하지 않는 패턴 뒤에 새 행 삽입

일치하지 않는 패턴 뒤에 새 행 삽입

다음 스크립트 출력이 있습니다

host1:101
host1:102
host2:101
host2:102
host2:103
host4:101
host5:101
host5:102
host5:103
host5:104

등..

각 호스트 그룹 뒤에 새 행을 삽입하고 싶습니다.

host1:101
host1:102

host2:101
host2:102

host3:101
host3:102

각 연속 행을 첫 번째 필드와 비교하고 일치하지 않는 첫 번째 필드 앞에 새 행을 삽입하는 온라인 AWK 사용자가 있습니까?

답변1

 awk -F: '{if (NR>1 && save!=$1) print "";} {save=$1; print;}'

행 1 앞에 빈 행을 삽입하고 싶지 않으므로 가 아니면 그것에 대해 생각조차 하지 마십시오 NR>1. 이후 첫 번째 필드가 이전 행에 저장된 값이 아닌 경우 빈 행이 인쇄됩니다.

답변2

다른 awk:

awk -F: 'a!~$1{print x}a=$1' file

출력의 첫 번째 빈 줄을 제거합니다.

awk -F: 'a&&a!~$1{print x}a=$1' file

답변3

또 다른 awk 방법:

awk -F ':' '!a[$1]++ && NR>1{print ""}1' file

답변4

다른 awk:

$ awk -F':' 'FNR > 1 && p != $1 {printf "\n"};{p = $1}1' file
host1:101
host1:102

host2:101
host2:102
host2:103

host4:101

host5:101
host5:102
host5:103
host5:104

관련 정보