![Разделение строк из txt-файла на столбцы Excel в bash](https://rvso.com/image/1070318/%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%20%D0%B8%D0%B7%20txt-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%20%D0%BD%D0%B0%20%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D1%8B%20Excel%20%D0%B2%20bash.png)
У меня есть текстовый файл (lines.txt) вроде этого:
ab.qq
1
2
3
cd.qq
3
4
5
ef.qq
7
8
9
И я пытаюсь перейти из каждой 4-й строки в другой столбец в файле Excel/CSV, по сути, это то, что выводится с помощью этого скрипта bash:
#!/bin/bash
split -l 4 lines.txt outsq
paste -d ' ' outsq*
ab.qq cd.qq ef.qq
1 3 7
2 4 8
3 5 9
Я был бы признателен за помощь в записи этого в файл Excel/CSV, а также любой другой способ, который даст результат (без разделения/вставки).
решение1
(rs
ресУтилита hape), изначально созданная в BSD, полезна для подобных целей.
Например:
$ rs -e -t 4 0 < lines.txt
ab.qq cd.qq ef.qq
1 3 7
2 4 8
3 5 9
где
-e
говорит, что каждую строку ввода следует рассматривать как элемент-t
транспонирует столбцы в строки4 0
выводит 4 строки и столько столбцов, сколько необходимо
Параметры -c
и -C
соответственно задают символы-разделители входных и выходных данных, поэтому для вывода CSV можно использовать
$ rs -etC, 4 0 < lines.txt
ab.qq,cd.qq,ef.qq,
1,3,7,
2,4,8,
3,5,9,
rs
доступен в виде пакета с тем же названием из universe
репозитория Ubuntu.
В качестве альтернативы вы можете сделать что-то вроде этого в awk:
$ awk '
{a[NR%4] = a[NR%4] == "" ? $0 : a[NR%4] "," $0}
END {for(i=1;i<=4;i++) print a[i%4]}
' lines.txt
ab.qq,cd.qq,ef.qq
1,3,7
2,4,8
3,5,9