У меня есть разделенные от вкладки данные как это:
a 2
b 3
c 4
d 6
e 8
f 9
g 10
h 11
i 12
...
Мой желаемый вывод должен быть похожим на это:
a 2 d 6 g 10
b 3 e 8 h 11
c 4 f 9 i 12
Как я могу сделать это, например, с помощью awk.
Заранее спасибо. С уважением, nsingh
Я не уверен в awk
но это может быть сделано просто с помощью split
и paste
.
Давайте примем названный файл data
содержит наши строки. Сначала разделять его на 3 блока строк:
$ split -l 3 data output-
Затем соединять эти блоки:
$ paste -d ' ' output-*
a 2 d 6 g 10
b 3 e 8 h 11
c 4 f 9 i 12
И не забудьте удалять output-
файлы.
Используя awk:
$ awk '{a[FNR%3] = a[FNR%3] == "" ? $0 : a[FNR%3] "\t" $0} END{for(i=1;i<=3;i++) print a[i%3]}' data.tsv
a 2 d 6 g 10
b 3 e 8 h 11
c 4 f 9 i 12
Другая возможность rs
утилита - вероятно, не установленный по умолчанию, но доступный на Ubuntu от пакета rs
.
$ rs -e -C -t 0 3 < data.tsv
a 2 d 6 g 10
b 3 e 8 h 11
c 4 f 9 i 12
где
-e
рассматривайте каждую входную строку как элемент массива-C
выходные столбцы разделяются единственной вкладкой-t
транспонируйте входные столбцы к строкам0 3
используйте столько же строк по мере необходимости с 3 столбцамиДругая опция pr
команда
Напр. печать в 3 столбцах, подавляя заголовки и нижние колонтитулы:
$ pr -T -3 < data.tsv
a 2 d 6 g 10
b 3 e 8 h 11
c 4 f 9 i 12
Если Вы хотите столбцы, разделенные точно одним Символом табуляции:
$ pr -s$'\t' -T -3 < data.tsv
a 2 d 6 g 10
b 3 e 8 h 11
c 4 f 9 i 12