awk '{print $NF,$0}' file | sort | cut -f2- -d' '
Grundsätzlich macht dieser Befehl:
- Wiederholen Sie das letzte Feld am Anfang, getrennt durch ein Leerzeichen (Standard-OFS)
- Sortieren, doppelte Dateinamen auflösen, wobei der vollständige Pfad ($0) zum Sortieren verwendet wird
- 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