GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Sortieren nach dem letzten Feld einer Zeile

awk '{print $NF,$0}' file | sort | cut -f2- -d' '

Grundsätzlich macht dieser Befehl:

  1. Wiederholen Sie das letzte Feld am Anfang, getrennt durch ein Leerzeichen (Standard-OFS)
  2. Sortieren, doppelte Dateinamen auflösen, wobei der vollständige Pfad ($0) zum Sortieren verwendet wird
  3. Das wiederholte erste Feld ausschneiden, f2- bedeutet vom zweiten bis zum letzten Feld

Ein Einzeiler in Perl zum Umkehren der Reihenfolge der Felder in einer Zeile:

perl -lne 'print join " ", reverse split / /'

Sie könnten es einmal verwenden, die Ausgabe zum Sortieren weiterleiten und dann zurückleiten, und Sie würden erreichen, was Sie wollen. Sie können / / ändern bis / +/ so drückt es Leerzeichen. Und es steht Ihnen natürlich frei, einen beliebigen regulären Ausdruck zu verwenden, um die Zeilen aufzuteilen.


etwas in der Art

awk '{print $NF"|"$0}' file | sort -t"|" -k1 | awk -F"|" '{print $NF }'

Hier ist eine Perl-Befehlszeile (beachten Sie, dass Ihre Shell möglicherweise verlangt, dass Sie $ maskieren s):

perl -e "print sort {(split '/', $a)[-1] <=> (split '/', $b)[-1]} <>"

Leiten Sie einfach die Liste hinein oder, wenn sich die Liste in einer Datei befindet, setzen Sie den Dateinamen an das Ende der Befehlszeile.

Beachten Sie, dass dieses Skript die Daten nicht wirklich ändert, Sie müssen also nicht darauf achten, welches Trennzeichen Sie verwenden.

Hier ist eine Beispielausgabe:

>perl -e "print sort {(split '/', $a)[-1] <=> (split '/', $b)[-1]} " files.txt
/a/e/f/g/h/01-do-this-first
/a/b/c/10-foo
/a/b/c/20-bar
/a/d/30-bob
/a/b/c/50-baz
/a/e/f/g/h/99-local

Linux
  1. 8 Tipps für die Linux-Kommandozeile

  2. Sortieren, aber Kopfzeile oben lassen?

  3. Alle Zeilenumbrüche außer dem letzten durch Leerzeichen ersetzen?

  4. Sortieren einer tabulatorgetrennten Datei

  5. Drucken Sie die letzte Zeile einer Datei über die CLI

Meistern Sie die Linux-Befehlszeile

Zum Anfang der Zeile im Vi-Modus von Bash springen?

Den übereinstimmenden Text an die Zeile anhängen?

Bash sortieren

So finden Sie das letzte Feld mit 'Ausschneiden'

So sortieren Sie diese Ausgabe 1,10,11..2