Tengo las siguientes líneas en 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
Quiero agrupar todos comenzando con la misma recopilación y tener una nueva línea entre ellos para que el resultado final se vea como el siguiente
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
Respuesta1
awk -F: '/^$/{next}$1!=f&&NR>1{print ""}{f=$1;print;}' foo.txt
da
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
sobre los datos de la muestra.
Explicación.
Los -F:
campos dice estarán delimitados por dos puntos. /^$/{next}
dice que se omitan todas las líneas en blanco en la entrada. $1!=f&&NR>1{print ""}
Si el nombre actual no es el mismo que el elemento guardado f
y el número de línea en el archivo es mayor que 1, imprima una línea en blanco para comenzar un nuevo grupo. {f=$1;print}
para todas las líneas guarde el nombre f
e imprima la línea. Hay formas de acortarlo, pero para mí esto no requiere nada más que lo básico awk
.
Respuesta2
$ 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