首页 > 解决方案 > 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循环,每行输出相同的第一个字段,直到它到达输入行中字段的末尾。

标签: awk

解决方案


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

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

您可以根据需要使用尽可能多的列和行。


推荐阅读