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.

Aria
fuente

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