A sortmuss alle Eingaben sehen, bevor die Ausgabe beginnen kann. Aus diesem Grund kann das sortProgramm problemlos eine Option zum Ändern einer vorhandenen Datei anbieten:
sort temp.txt -o temp.txt
Im Einzelnen heißt es in der Dokumentation von GNUsort :
Normalerweise liest sort alle Eingaben, bevor die Ausgabedatei geöffnet wird, sodass Sie eine Datei mithilfe von Befehlen wie sort -o F Fund sicher sortieren können cat F | sort -o F. Jedoch sortmit --merge( -m) kann die Ausgabedatei öffnen , bevor alle Eingaben zu lesen, so dass ein Befehl wie cat F | sort -m -o F - Gnicht sicher ist , wie Art des Schreiben beginnen könnte , Fbevor catgetan wird es zu lesen.
Während die Dokumentation von BSD sortsagt:
Wenn [die] Ausgabedatei eine der Eingabedateien ist, kopiert sort sie in eine temporäre Datei, bevor die Ausgabe sortiert und in die [die] Ausgabedatei geschrieben wird.
Befehle wie uniqkönnen mit dem Schreiben der Ausgabe beginnen, bevor sie das Lesen der Eingabe beendet haben. Diese Befehle unterstützen normalerweise keine direkte Bearbeitung (und es wäre schwieriger für sie, diese Funktion zu unterstützen).
Normalerweise umgehen Sie dies mit einer temporären Datei. Wenn Sie unbedingt eine Zwischendatei vermeiden möchten, können Sie das gesamte Ergebnis in einem Puffer speichern, bevor Sie es ausschreiben. Zum Beispiel mit perl:
uniq temp.txt | perl -e 'undef $/; $_ = <>; open(OUT,">temp.txt"); print OUT;'
Hier liest der Perl-Teil die gesamte Ausgabe von uniqin Variable $_und überschreibt dann die Originaldatei mit diesen Daten. Sie können dasselbe in der Skriptsprache Ihrer Wahl tun, vielleicht sogar in Bash. Beachten Sie jedoch, dass genügend Speicher zum Speichern der gesamten Datei erforderlich ist. Dies ist bei der Arbeit mit großen Dateien nicht ratsam.