Dividindo linhas de um arquivo txt em colunas do Excel no bash

Dividindo linhas de um arquivo txt em colunas do Excel no bash

Eu tenho um arquivo de texto (lines.txt) como este:

ab.qq
1
2
3
cd.qq
3
4
5
ef.qq
7
8
9

E estou tentando passar de cada quarta linha para uma coluna diferente em um arquivo Excel/csv, basicamente o que é impresso com este script 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 

Eu apreciaria alguma ajuda para escrever isso em um arquivo Excel/csv, e também qualquer outra forma que produza o resultado é definitivamente adequada (sem dividir/colar).

Responder1

O rs(Reéhape), originalmente do BSD, é útil para esse tipo de coisa.

Por exemplo:

$ rs -e -t 4 0 < lines.txt
ab.qq  cd.qq  ef.qq
1      3      7
2      4      8
3      5      9

onde

  • -ediz para tratar cada linha de entrada como um elemento
  • -ttranspõe colunas para linhas
  • 4 0gera 4 linhas e quantas colunas forem necessárias

As opções -ce -Cdefinem respectivamente os caracteres separadores de entrada e saída - portanto, para saída CSV você pode usar

$ rs -etC, 4 0 < lines.txt
ab.qq,cd.qq,ef.qq,
1,3,7,
2,4,8,
3,5,9,

rsestá disponível como um pacote com o mesmo nome no universerepositório do Ubuntu.


Alternativamente, você poderia fazer algo assim no 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

informação relacionada