regex para agrupá-los com o mesmo nome

regex para agrupá-los com o mesmo nome

Eu tenho as seguintes linhas em 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

Quero agrupar todos começando na mesma reunião e ter uma nova linha entre eles para que o resultado final seja semelhante ao seguinte

    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

Responder1

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

nos dados da amostra.

Explicação.

Os -F:campos dizem serão delimitados por dois pontos. /^$/{next}diz para pular todas as linhas em branco na entrada. $1!=f&&NR>1{print ""}se o nome atual não for igual ao salvo fe o número da linha no arquivo for maior que 1, imprima uma linha em branco para iniciar um novo grupo. {f=$1;print}para todas as linhas salve o nome fe imprima a linha. Existem maneiras de torná-lo mais curto, mas para mim isso não requer nada além do básico awk.

Responder2

$ 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

informação relacionada