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
sed
Tambié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