Tengo un archivo como el de abajo ...
abc, 12345
def, text and nos
ghi, something else
jkl, words and numbers
abc, 56345
def, text and nos
ghi, something else
jkl, words and numbers
abc, 15475
def, text and nos
ghi, something else
jkl, words and numbers
abc, 123345
def, text and nos
ghi, something else
jkl, words and numbers
Quiero convertirlo (unirlo) como:
abc, 12345, 56345, 15475, 123345
def, text and nos, text and nos,text and nos,text and nos
ghi, something else, something else, something else, something else
jkl, words and numbers, words and numbers, words and numbers, words and numbers
text-processing
command-line
awk
join
merge
pvkbhat
fuente
fuente
Respuestas:
Si no le importa el orden de salida:
Explicación
NF>1
lo que significa que solo necesitamos procesar la línea que no está en blanco.a
, con la clave es el primer campo, el valor es el segundo campo (o el resto de la línea). Si la clave ya tiene valor hasd, concatenamos dos valores.END
bloque, recorremos la matriz asociativaa
, imprimimos todas sus claves con el valor correspondiente.O usando
perl
mantendrá el orden:fuente
perl -F, -lane 'next unless /./;push @{$k{$F[0]}}, ",@F[1..$#F]"; END{print "$_@{$k{$_}}" foreach keys(%k)}' file
:) ¡Grandes mentes piensan igual!Oh, esa es fácil. Aquí hay una versión simple que mantiene el orden de las teclas tal como aparecen en el archivo:
La salida debería verse así:
Si no le importa tener una línea en blanco adicional al final, simplemente reemplace la
printf
línea conprintf("%s %s\n\n", Key[j], Val[Key[j]]);
fuente