it-swarm.com.de

So sortieren Sie eine Datei an Ort und Stelle

Wenn wir den Befehl sort file verwenden, zeigt Die Datei ihren Inhalt sortiert an.

137
Ali Sajid

Sie können die Dateiumleitung verwenden, um die sortierte Ausgabe umzuleiten:

sort input-file > output_file

Oder Sie können die Sortieroption -o, --output=FILE verwenden, um dieselbe Eingabe- und Ausgabedatei anzugeben:

sort -o file file

Hinweis: Ein häufiger Fehler ist der Versuch, die Ausgabe in dieselbe Eingabedatei umzuleiten (Z. B. sort file > file). Dies funktioniert nicht, da die Shell die Umleitungen vornimmt (nicht das Programm sort (1)) und die Eingabedatei (auch die Ausgabe) wird gelöscht, bevor sort (1) Programmieren Sie die Gelegenheit, es zu lesen.

284
Sylvain Bugat

Der Befehl sort druckt das Ergebnis der Sortierung standardmäßig in der Standardausgabe. Um eine "In-Place" -Sortierung zu erreichen, können Sie Folgendes tun:

sort -o file file

Dadurch wird die Eingabe file mit der sortierten Ausgabe überschrieben. Der -o-Schalter, der zum Angeben einer Ausgabe verwendet wird, wird von POSIX definiert, sollte also in allen Versionen von sort verfügbar sein:

-o Geben Sie den Namen einer Ausgabedatei an, die anstelle der Standardausgabe verwendet werden soll. Diese Datei kann mit einer der Eingabedateien identisch sein.

Wenn Sie unglücklich genug sind, um eine Version von sort ohne den -o-Schalter zu haben ( Luis versichert mir, dass sie existieren), können Sie auf die Standard-Weise eine "In-Place-Bearbeitung" durchführen:

sort file > tmp && mv tmp file
41
Tom Fenech

Versuchen Sie zum Sortieren der Datei an Ort und Stelle:

echo "$(sort your_file)" > your_file

Wie in anderen Antworten erläutert, können Sie die Ausgabe nicht direkt zurück in die Eingabedatei umleiten. Sie können den Befehl sort jedoch zuerst auswerten und anschließend wieder zur ursprünglichen Datei umleiten. Auf diese Weise können Sie eine In-Place-Sortierung implementieren.

Auf ähnliche Weise können Sie diesen Trick auch auf andere Befehle wie paste anwenden, um zeilenweise das Anhängen zu implementieren.

2
Bo Tian
sort file | sponge file

Dies ist im folgenden Fedora-Paket enthalten:

moreutils : Additional unix utilities
Repo        : Fedora
Matched from:
Filename    : /usr/bin/sponge
1
SilverlightFox

Hier ist ein Ansatz, der (ab) vim verwendet:

vim -c :sort -c :wq -E -s "${filename}"

Der -c :sort -c :wq-Abschnitt ruft Befehle auf, die nach dem Öffnen der Datei angezeigt werden sollen. -E und -s sind erforderlich, damit vim in einem "headless" -Modus ausgeführt wird, der nicht zum Terminal zeichnet.

Dies hat fast keine Vorteile gegenüber dem sort -o "${filename}" "${filename}"-Ansatz, nur dass das Argument Dateiname nur einmal verwendet wird.


Dies war hilfreich, um eine formatter-Direktive in einem nanorc-Eintrag für .gitignore-Dateien zu implementieren. Folgendes habe ich dafür verwendet:

syntax "gitignore" "\.gitignore$"

formatter vim -c :sort -c :wq -E -s
1
Anthony Sottile

Möchten Sie alle Dateien in einem Ordner und Unterordner sortieren und überschreiben?

Benutze das:

find . -type f -exec sort {} -o {} \;
0
luandrea