сводная таблица awk и использование строки заголовка в повторяющемся столбце - PullRequest
0 голосов
/ 10 июля 2019

У меня есть таблица, подобная этой:

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 ]

2 голосов
/ 10 июля 2019

Вот масштабируемое минимальное решение POSIX Awk:

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

Вы можете использовать столько столбцов и строк, сколько необходимо.

1 голос
/ 10 июля 2019

Это 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...