foo.txt에 다음 줄이 있습니다.
aaa:6600 location: US
aaa:6622 location: US
xxx:6601 location: EU
xxx:6602 location: EU
xxx:6603 location: EU
ggg:7701 location: KR
ggg:8808 location: KR
동일하게 시작하는 모든 집계를 그룹화하고 그 사이에 새 행을 추가하고 싶으므로 최종 출력은 다음과 같습니다.
aaa:6600 location: US
aaa:6622 location: US
xxx:6601 location: EU
xxx:6602 location: EU
xxx:6603 location: EU
ggg:7701 location: KR
ggg:8808 location: KR
답변1
awk -F: '/^$/{next}$1!=f&&NR>1{print ""}{f=$1;print;}' foo.txt
주어진
aaa:6600 location: US
aaa:6622 location: US
xxx:6601 location: EU
xxx:6602 location: EU
xxx:6603 location: EU
ggg:7701 location: KR
ggg:8808 location: KR
샘플 데이터에 대해
설명하다.
필드 -F:
는 콜론으로 구분됩니다. /^$/{next}
입력의 모든 빈 줄을 건너뛰었음을 나타냅니다. $1!=f&&NR>1{print ""}
현재 이름이 저장된 이름과 다르고 f
파일의 줄 번호가 1보다 큰 경우 빈 줄을 인쇄하여 새 그룹을 시작합니다. {f=$1;print}
모든 라인에 대해 이름을 저장 f
하고 해당 라인을 인쇄합니다. 더 짧게 만드는 방법은 여러 가지가 있지만 저에게는 이 방법이 기본입니다 awk
.
답변2
$ awk -F':' '!NF{next} $1 != prev{if (NR>1) print ""; prev=$1} 1' file
aaa:6600 location: US
aaa:6622 location: US
xxx:6601 location: EU
xxx:6602 location: EU
xxx:6603 location: EU
ggg:7701 location: KR
ggg:8808 location: KR