Dividir líneas de un archivo txt en columnas de Excel en bash

Dividir líneas de un archivo txt en columnas de Excel en bash

Tengo un archivo de texto (lines.txt) como este:

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

Y estoy tratando de pasar de cada cuarta fila a una columna diferente en un archivo excel/csv, básicamente lo que se imprime con 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 

Agradecería ayuda para escribir esto en un archivo excel/csv, y también cualquier otra forma que produzca el resultado definitivamente está bien (sin dividir/pegar).

Respuesta1

El rs(rmishape), originaria de BSD, es útil para este tipo de cosas.

Por ejemplo:

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

dónde

  • -edice tratar cada línea de entrada como un elemento
  • -ttranspone columnas a filas
  • 4 0genera 4 filas y tantas columnas como sea necesario

Las opciones -cy -Cconfiguran respectivamente los caracteres separadores de entrada y salida, por lo que para la salida CSV puede usar

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

rsestá disponible como un paquete del mismo nombre en el universerepositorio de Ubuntu.


Alternativamente, puedes hacer algo como esto en 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

información relacionada