Transformar campos delimitados en líneas con nombre y valor.
El archivo a contiene los nombres de los campos:
timestamp,nombre,ip
El archivo b contiene los valores:
2021-12-17 16:01:19.970,app1,10.0.0.0
2021-12-17 16:01:19.260,app1,10.0.0.1
Cuando utilizo awk de la siguiente manera:
awk 'BEGIN{FS=",";OFS="\n"} {if(NR%3==0){print "----"};$1=$1;print;}' b
Obtengo:
----
2021-12-17 16:01:19.970
app1
10.0.0.0
----
2021-12-17 16:01:19.260
app1
10.0.0.1
¿Hay alguna forma de fusionar los pares clave:valor en cada línea?
El resultado que deseo es:
----
timestamp:2021-12-17 16:01:19.970
app:app1
ip:10.0.0.0
----
timestamp:2021-12-17 16:01:19.260
app:app1
ip:10.0.0.1
davy.ai
Sí, puedes modificar el comando awk para combinar clave:valor en cada línea. Aquí está el comando modificado:
Esto producirá la siguiente salida:
Explicación:
BEGIN{OFS="\n"}
establece el separador de campos de salida como salto de línea.{if(NR%3==0){print "----"}; print "timestamp:"$1, "app:"$2, "ip:"$3}
imprime los pares clave:valor para cada línea e inserta una línea separadora (—-) cada tres líneas (es decir, después de cada registro).