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.

61voto

jins Punkte 645
tac <file_name>

Beispiel:

$ cat file1.txt
1
2
3
4
5

$ tac file1.txt
5
4
3
2
1

45voto

DigitalRoss Punkte 138823
$ (tac 2> /dev/null || tail -r)

Versuchen Sie tac , das unter Linux funktioniert, und wenn das nicht funktioniert, verwenden Sie tail -r , das unter BSD und OSX funktioniert.

26voto

Probieren Sie den folgenden Befehl aus:

grep -n "" myfile.txt | sort -r -n | gawk -F : "{ print $2 }"

17voto

lacostenycoder Punkte 9711

Für betriebssystemübergreifende Lösungen (z. B. OSX, Linux), die Folgendes verwenden können tac innerhalb eines Shell-Skripts homebrew verwenden, wie andere oben erwähnt haben, dann einfach alias tac wie so:

Lib installieren

Für MacOS

brew install coreutils

Für linux debian

sudo apt-get update
sudo apt-get install coreutils 

Dann fügen Sie den Alias

echo "alias tac='gtac'" >> ~/.bash_aliases (or wherever you load aliases)
source ~/.bash_aliases
tac myfile.txt

17voto

konsolebox Punkte 66082

Einfach Bash :) (4.0+)

function print_reversed {
    local lines i
    readarray -t lines

    for (( i = ${#lines[@]}; i--; )); do
        printf '%s\n' "${lines[i]}"
    done
}

print_reversed < file

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