같은 이름으로 그룹화하는 정규식

같은 이름으로 그룹화하는 정규식

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

관련 정보