使用 AWK 进行简单的数据转换

bet*_*tty 4 awk text-processing

我有一些这种格式的数据;-

Type,Fac1,Fac2,Fac3
1,0.1,0.1,0.1
2,0.2,0.2,0.2
3,0.3,0.3,0.3
Run Code Online (Sandbox Code Playgroud)

使用 AWK,我需要转换数据,使其看起来像这样;-

Type
1,Fac1,0.1
1,Fac2,0.1
1,Fac3,0.1
2,Fac1,0.2
2,Fac2,0.2
2,Fac3,0.2
3,Fac1,0.3
3,Fac2,0.3
3,Fac3,0.3
Run Code Online (Sandbox Code Playgroud)

换句话说,一种从水平向垂直转变的“枢轴”动作。

所以我试过这个:

awk -F ',' '{for (i=2;i<=NF;i++) { if (i==2) {print $1"," $i } else print $1"," $i}}'
Run Code Online (Sandbox Code Playgroud)

Ed *_*ton 7

$ cat tst.awk
BEGIN { FS=OFS="," }
NR==1 {
    print $1
    split($0,tags)
    next
}
{
    for (i=2; i<=NF; i++) {
        print $1, tags[i], $i
    }
}
Run Code Online (Sandbox Code Playgroud)

$ awk -f tst.awk file
Type
1,Fac1,0.1
1,Fac2,0.1
1,Fac3,0.1
2,Fac1,0.2
2,Fac2,0.2
2,Fac3,0.2
3,Fac1,0.3
3,Fac2,0.3
3,Fac3,0.3
Run Code Online (Sandbox Code Playgroud)

  • 别客气。给它几个小时看看你是否得到更好的答案,然后查看 https://unix.stackexchange.com/help/someone-answers 了解下一步做什么。 (2认同)