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

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

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

관련 정보