Textdateien stapelweise mit Bash-Skript falten

Textdateien stapelweise mit Bash-Skript falten

Ich habe Schwierigkeiten, etwas ganz Einfaches zu tun. Ich habe ungefähr 2000 TXT-Dateien, die aus einer einzigen Zeile mit Ziffern bestehen. Ich möchte die einzelne Zeile mit dem Befehl fold in eine Spalte mit mehreren Zeilen falten und die Originaldatei mit dieser neuen, gefalteten Version überschreiben. Mein Versuch:

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

Funktioniert nicht. Hilfe? Danke.

Antwort1

Hier gibt es zwei Probleme. Erstens deklarieren Sie die Variable „i“, verwenden aber „$file“, das nicht existiert. Selbst wenn es existiert, besteht das zweite Problem darin, dass Bash „von links nach rechts“ liest. Das bedeutet, dass es zuerst ">$file" sieht und den Inhalt der Datei überschreibt. Wenn Sie also die richtigen Variablen verwendet hätten, hätten Sie Ihre Daten verloren.

Also, ein Fehler hat dich vor dem anderen bewahrt, du Glückspilz :)

Versuchen Sie etwas wie:

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

Antwort2

sedkönnte auch eine Option sein, es behandelt das Problem mit den temporären Dateien intern:

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

verwandte Informationen