使用 awk 将列转置为行,并重复第一列数据

使用 awk 将列转置为行,并重复第一列数据

我在 test.txt 中的输入为

month,var1,var2
June,10,a
Sep,20,b
Dec,30,c

我想要的输出为

month,variable,value
June,var1,10
June,var2,a
Sep,var1,20
Sep,var2,b
Dec,var1,30
Dec,var2,c

请注意,从第二列开始的列数是动态的。它可以有 2 列或 100 列。我们如何使用 awk 转置数据?

答案1

尝试

$ awk -F, '
    BEGIN{OFS=FS} 
    NR==1{n = split($0,a); print "month,variable,value"; next}
    {for(i=2;i<4;i++) print $1,a[i],$i}
' file
month,variable,value
June,var1,10
June,var2,a
Sep,var1,20
Sep,var2,b
Dec,var1,30
Dec,var2,c

(这更像是爆炸而不是换位)。

答案2

awk -F, '
    BEGIN{OFS=FS} 
    NR==1{n = split($0,a); print "month,variable,value"; next}
    {for(i=2;i<NF;i++) if (a[i] !=""){ print $1,a[i],$i} }
' file

相关内容