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