Estoy tratando de convertir un archivo de texto en una hoja de cálculo separada por tabulaciones. Mi archivo de texto es algo como esto:
Dog
Cat
Fish
Lizard
Wolf
Lion
Shark
Gecko
Coyote
Puma
Eel
Iguana
Con las funciones estándar de búsqueda y reemplazo en Gedit o LibreOffice, es fácil reemplazar el final de la línea con una pestaña. Pero si solo cambio los retornos de carro por tabulaciones, obtendré esto:
Dog Cat Fish Lizard
Wolf Lion Shark Gecko
Coyote Puma Eel Iguana
Pero lo que tengo que hacer es conseguir que se vea así:
Dog Cat Fish Lizard
Wolf Lion Shark Gecko
Coyote Puma Eel Iguana
Entonces, ¿puedo cambiar cada carácter de final de línea por una pestaña excepto por cada cuarta línea?
No sé si ese tipo de iteración condicional se puede hacer con expresiones regulares dentro de un programa como Gedit o LibreOffice, así que tal vez esto deba ser algún tipo de función de línea de comando. Ni siquiera tengo claro cuál es la mejor herramienta para empezar.
Actualización:
Probé los siguientes comandos:
sed 'N;N;N;s/\n/\t/g' file > file.tsv
paste - - - - < file > file.tsv
pr -aT -s$'\t' -4 file > file.tsv
xargs -d '\n' -n4 < inputfile.txt
Pero cuando intento abrir el tsv
resultante archivo en LibreOffice, las columnas no están del todo bien. No estoy seguro si esto significa que no estoy ejecutando correctamente los comandos anteriores o si estoy haciendo algo mal en la función de importación de LibreOffice:
Solo como referencia, el resultado deseado debería verse así:
Respuesta aceptada:
podrías use un editor de línea de comandos como sed
sed 'N;N;N;s/\n/\t/g' file > file.tsv
o, más programáticamente, agregando una barra invertida caracteres de continuación de línea a cada una de las líneas que desea unir utilizando n skip m
de GNU sed operador de dirección y seguirlo con el clásico one-liner para unir líneas continuas:
sed '0~4! s/$/\t\\/' file | sed -e :a -e '/\\$/N; s/\\\n//; ta'
Véase, por ejemplo, Explicación de Sed One-Liners:
-
Agregue una línea a la siguiente si termina con una barra invertida "\".
sed -e :a -e '/\\$/N; s/\\\n//; ta'
Sin embargo, en mi humilde opinión, sería más fácil con una de las otras utilidades de procesamiento de texto estándar, por ejemplo,
paste - - - - < file > file.tsv
(el número de -
corresponderá al número de columnas) o
pr -aT -s$'\t' -4 file > file.tsv
(puede omitir -s$'\t
si no le importa que la salida esté separada por varias pestañas).
Es casi seguro que el extraño comportamiento de reimportación que está observando se debe a que el archivo original tiene finales de línea CRLF al estilo de Windows. Si necesita trabajar con archivos de Windows, puede realizar la conversión en el comando de varias maneras, por ejemplo,
tr -d '\r' < file.csv | paste - - - -
o
sed 'N;N;N;s/\r\n/\t/g' file.csv
El primero eliminará TODOS los retornos de carro, mientras que el segundo conservará un CR al final de cada una de las nuevas líneas (que puede ser lo que desee si el usuario final previsto está en Windows).
Relacionado:¿La tableta gráfica Wacom Cth-480/Ctl-480 no se detecta en Ubuntu 13.10 en Ubuntu?