Как расположить каждый n строки в столбцы с помощью awk

У меня есть разделенные от вкладки данные как это:

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

0
задан 11 April 2020 в 17:26

2 ответа

Я не уверен в 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- файлы.

2
ответ дан 11 April 2020 в 22:28

Используя 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
0
ответ дан 11 April 2020 в 22:28

Другие вопросы по тегам:

Похожие вопросы: