![Dividir líneas de un archivo txt en columnas de Excel en bash](https://rvso.com/image/1070318/Dividir%20l%C3%ADneas%20de%20un%20archivo%20txt%20en%20columnas%20de%20Excel%20en%20bash.png)
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
-e
dice tratar cada línea de entrada como un elemento-t
transpone columnas a filas4 0
genera 4 filas y tantas columnas como sea necesario
Las opciones -c
y -C
configuran 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,
rs
está disponible como un paquete del mismo nombre en el universe
repositorio 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