cómo imprimir nombres de columnas también mientras lee los valores para esa variable


1

Tengo datos de muestra a continuación

EMP_ID|EMP_NAME|AGE|SALARAy
123456|XXXXXXXXX|30|10000000

¿Hay alguna manera de dividir el registro en múltiples registros y también obtener el encabezado? El resultado de ejemplo debería ser como

EMP_ID|Values|HeaderName
123456|XXXXXXX|EMP_NAME
123456|30|AGE
123456|10000000|SALARY

Intenté usar el siguiente comando

awk -F\| 'NR>1{for(i=2;i<=NF;i++){print $1"|"$(i)}}' records.txt 

Aquí no puedo obtener el nombre del encabezado y solo obtengo EMP_ID y valores.

Respuestas:


1

Obtenga los encabezados y guárdelos en una matriz:

 NR==1 { for (i=1;i<=NF;i++) h[i]=$i }

entonces puedes simplemente agregarlos usando h[i]

awk -F\| '
    BEGIN { print "EMP_ID|Values|HeaderName" }
    NR==1 { for(i=2;i<=NF;i++) h[i]=$i }
    NR>1 { for(i=2;i<=NF;i++) print $1"|"$i"|"h[i] }
' records.txt 

Muchas gracias. Funcionó. ¿Puedo especificar una furia de atributos aquí. Actualmente en el comando anterior, estoy tratando de agregar $ {1} `" | "S {i}. . Pero en lugar de solo una columna $ {1} tengo unas 10 columnas. ¿Hay alguno que tenga un rango específico y luego obtenga las 10 columnas y agregue el $ (i)
Arya

Realmente no entiendo. Haga una nueva pregunta y proporcione algunos ejemplos de entrada y la salida deseada.
pLumo

Hola pLumo .. He enviado una nueva pregunta unix.stackexchange.com/questions/519965/…
Arya
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.