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