我有一张这样的桌子:
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循环将每行输出相同的第一个字段,直到到达输入行中字段的末尾。
答案 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