Archivos de texto plegado por lotes con script bash

Archivos de texto plegado por lotes con script bash

Me está costando mucho hacer algo bastante simple. Tengo alrededor de 2000 archivos .txt que se componen de una sola línea de dígitos. Me gustaría doblar la línea única en una columna con muchas filas, usando el comando plegar y sobrescribir el archivo original con esta nueva versión plegada. Mi intento:

#!/bin/bash
for i in *.txt ; do
  fold -w 1 $file > $file
done

No funciona. ¿Ayuda? Gracias.

Respuesta1

Hay dos problemas aquí. Primero, estás declarando la variable "i" pero usando "$file" que no existe. Incluso si así fuera, el segundo problema es que bash se lee "de izquierda a derecha". Eso significa que primero verá ">$file" y sobrescribirá el contenido del archivo. Por lo tanto, si estuviera utilizando las variables correctas, habría perdido sus datos.

Entonces, un error te salvó del otro, afortunado, afortunado :)

Pruebe algo como:

for i in *.txt ; do fold -w 1 $i > sillytmpfile; mv sillytmpfile $i; done

Respuesta2

sedTambién podría ser una opción, maneja el problema del archivo temporal internamente:

for i in *.txt ; do
  sed  -i 's#.#&\n#g' $file
done

información relacionada