У меня есть текстовый файл (lines.txt), как этот:
ab.qq
1
2
3
cd.qq
3
4
5
ef.qq
7
8
9
И я пытаюсь переместить из каждой 4-й строки в другую колонку в файле excel/csv, в основном то, что печатается этим бэш-скриптом:
#!/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, а также любой другой способ, который дает результат, определенно хорош (без дробления/вставки).
Утилита rs
( r e s 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