その変数の値を読み取るときに列名を印刷する方法

その変数の値を読み取るときに列名を印刷する方法

次のサンプルデータがあります

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

レコードを複数のレコードに分割してヘッダーを取得する方法はありますか?サンプル出力は次のようにする必要があります。

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

次のコマンドを試してみました。

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

ここではヘッダー名を取得できず、EMP_IDと値のみを取得できます。

答え1

ヘッダーを取得して配列に保存します。

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

その後、単に以下を使用して追加できます。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 

関連情報