Разделение строк из txt-файла на колонки excel в bash

У меня есть текстовый файл (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, а также любой другой способ, который дает результат, определенно хорош (без дробления/вставки).

0
задан 26 March 2021 в 03:13

1 ответ

Утилита 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
3
ответ дан 23 April 2021 в 23:30