Frage

Ich schreibe einen kleinen Shell-Skript, das die Zeilen einer Textdatei umkehren muss. Gibt es einen Standard-Filter Befehl diese Art der Sache zu tun?

Meine spezifische Anwendung ist, dass ich eine Liste von Git bin immer Identifikatoren begehen, und ich möchte, dass sie in umgekehrter Reihenfolge verarbeiten:

git log --pretty=oneline work...master | grep -v DEBUG: | cut -d' ' -f1 | reverse

Das Beste, was ich habe kommen mit ist reverse wie folgt umzusetzen:

... | cat -b | sort -rn | cut -f2-

Dies verwendet cat jede Zeile nummerieren, dann sort sie numerisch in absteigender Reihenfolge zu sortieren (die die gesamte Datei Umkehr endet), dann cut die nicht benötigte Zeilennummer zu entfernen.

Die oben genannten Arbeiten für meine Anwendung, kann aber im allgemeinen Fall, weil cat -b nur Zahlen nicht leere Zeilen nicht.

Gibt es eine bessere, allgemeinere Art und Weise, dies zu tun?

War es hilfreich?

Lösung

Andere Tipps

Die Antwort ist nicht 42, sondern tac .

Edit: Langsamer, aber ein höherer Speicherbedarf sed mit

sed 'x;1!H;$!d;x'

und noch länger

perl -e'print reverse<>'

Es gibt ein Standard Befehl für Ihren Zweck:

tail -r file.txt

druckt die Linien von datei.txt in umgekehrter Reihenfolge!

cat -b nur Zahlen nicht leere Zeilen "


Wenn das das einzige Problem ist Sie vermeiden wollen, warum dann verwenden „cat -n“ nicht alle Linien nummerieren?

:   "@(#)$Id: reverse.sh,v 1.2 1997/06/02 21:45:00 johnl Exp $"
#
#   Reverse the order of the lines in each file

awk ' { printf("%d:%s\n", NR, $0);}' $* |
sort -t: +0nr -1 |
sed 's/^[0-9][0-9]*://'

Funktioniert wie ein Zauber für mich ...

ähnlich wie bei dem sed Beispiel oben mit perl - vielleicht einprägsamer (je nachdem, wie Ihr Gehirn verdrahtet ist):

perl -e 'print reverse <>'

In diesem Fall verwenden Sie nur --reverse:

$ git log --reverse --pretty=oneline work...master | grep -v DEBUG: | cut -d' ' -f1
rev <name of your text file.txt>

Sie können dies auch tun:

echo <whatever you want to type>|rev
awk '{a[i++]=$0}END{for(;i-->0;)print a[i]}'

Mehr schneller als sed und kompatibel für embed Geräte wie openwrt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top