awk数据透视表并在重复列中使用标题行

时间:2019-07-10 12:26:51

标签: awk

我有一张这样的桌子:

type   heart   muscle   pancreas
A      3       2        2
B      2       2        1
C      6       4        9

,并希望使用awk将其旋转到:

A      heart     3
A      muscle    2
A      pancreas  2
B      heart     2
B      muscle    2
B      pancreas  1
C      heart     6
C      muscle    4
C      pancreas  9

首先,我想我必须将第一输入行的字段存储到一个数组中,该数组将用于为每一行输出第二字段。接下来的while循环将每行输出相同的第一个字段,直到到达输入行中字段的末尾。

2 个答案:

答案 0 :(得分:2)

这是一个可扩展的,最小的POSIX Awk解决方案:

awk 'NR==1 {split($0, a); next} {for(f=2;f<=NF;f++) print $1, a[f], $f}' file

您可以根据需要使用任意多的列和行。

答案 1 :(得分:1)

awk可以做到:

awk '{for (i=2;i<=4;i++) if(NR==1) a[i]=$i; else print $1,a[i],$i}' file
A heart 3
A muscle 2
A pancreas 2
B heart 2
B muscle 2
B pancreas 1
C heart 6
C muscle 4
C pancreas 9