es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes modificar el comando awk para combinar clave:valor en cada línea. Aquí está el comando modificado:

    awk -F"," 'BEGIN{OFS="\n"} {if(NR%3==0){print "----"}; print "timestamp:"$1, "app:"$2, "ip:"$3}' b
    

    Esto producirá la siguiente salida:

    ----
    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
    

    Explicación:

    • -F”,” establece el separador de campos como coma.
    • 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).

Comments are closed.