842 Stimmen

Wie kann ich die Reihenfolge der Zeilen in einer Datei umkehren?

Ich möchte die Reihenfolge der Zeilen in einer Textdatei (oder stdin) umkehren, wobei der Inhalt jeder Zeile erhalten bleibt.

Also, d.h., beginnend mit:

foo
bar
baz

Ich würde gerne mit

baz
bar
foo

Gibt es ein standardmäßiges UNIX-Befehlszeilenprogramm für diese Aufgabe?

8 Stimmen

Wichtiger Hinweis zum Vertauschen der Linien: Vergewissern Sie sich, dass Ihre Datei einen abschließenden Zeilenumbruch enthält. Erstens. Andernfalls werden die letzten beiden Zeilen einer Eingabedatei in einer Ausgabedatei zu einer Zeile zusammengefügt (zumindest bei Verwendung der Option perl -e 'print reverse <>' aber das gilt wahrscheinlich auch für andere Methoden).

1 Stimmen

0 Stimmen

Außerdem ist es fast ein Duplikat (wenn auch älter) von unix.stackexchange.com/questions/9356/ . Wie in diesem Fall ist eine Migration zu unix.stackexchange.com wahrscheinlich angebracht.

1731voto

Mihai Limbășan Punkte 59901

Ebenfalls erwähnenswert: tac (das, ähem, Gegenteil von cat ). Teil der coreutils .

Eine Datei in eine andere umwandeln

tac a.txt > b.txt

531voto

Jason Cohen Punkte 78227

BSD-Schwanz:

tail -r myfile.txt

Referenz: FreeBSD , NetBSD , OpenBSD et OS X Handbuchseiten.

190voto

ephemient Punkte 189038

Da ist die bekannte sed-Tricks :

# reverse order of lines (emulates "tac")
# bug/feature in HHsed v1.5 causes blank lines to be deleted
sed '1!G;h;$!d'               # method 1
sed -n '1!G;h;$p'             # method 2

(Erläuterung: Nicht-einleitende Zeile dem Haltepuffer voranstellen, Zeile und Haltepuffer vertauschen, Zeile am Ende ausgeben)

Alternativ (mit schnellerer Ausführung) aus den awk-Einzeilern :

awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' file*

Wenn Sie sich das nicht merken können,

perl -e 'print reverse <>'

Auf einem System mit GNU-Utilities sind die anderen Antworten einfacher, aber nicht die ganze Welt ist GNU/Linux...

154voto

Yakir GIladi Edry Punkte 2206

Am Ende Ihres Befehls setzen: | tac

tac macht genau das, wonach du fragst: "Schreibe jede DATEI auf die Standardausgabe, die letzte Zeile zuerst."

tac ist das Gegenteil von Katze :-).

71voto

DerMike Punkte 14328

Wenn Sie sich zufällig in vim verwenden.

:g/^/m0

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X