![使用 awk 将列转置为行,并重复第一列数据](https://linux22.com/image/167602/%E4%BD%BF%E7%94%A8%20awk%20%E5%B0%86%E5%88%97%E8%BD%AC%E7%BD%AE%E4%B8%BA%E8%A1%8C%EF%BC%8C%E5%B9%B6%E9%87%8D%E5%A4%8D%E7%AC%AC%E4%B8%80%E5%88%97%E6%95%B0%E6%8D%AE.png)
我在 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