awk '{print $NF,$0}' file | sort | cut -f2- -d' '
Fondamentalmente, questo comando fa:
- Ripeti l'ultimo campo all'inizio, separato da uno spazio bianco (OFS predefinito)
- Ordina, risolvi i nomi di file duplicati utilizzando il percorso completo ($0) per l'ordinamento
- Taglia il primo campo ripetuto, f2- significa dal secondo campo all'ultimo
Un one-liner in perl per invertire l'ordine dei campi in una riga:
perl -lne 'print join " ", reverse split / /'
Potresti usarlo una volta, reindirizzare l'output per ordinare, quindi reindirizzarlo e otterresti ciò che desideri. Puoi cambiare / /
a / +/
quindi stringe gli spazi. E sei ovviamente libero di usare qualunque espressione regolare tu voglia dividere le righe.
qualcosa di simile
awk '{print $NF"|"$0}' file | sort -t"|" -k1 | awk -F"|" '{print $NF }'
Ecco una riga di comando Perl (nota che la tua shell potrebbe richiedere l'escape di $
s):
perl -e "print sort {(split '/', $a)[-1] <=> (split '/', $b)[-1]} <>"
Basta reindirizzare l'elenco al suo interno o, se l'elenco è in un file, inserire il nome del file alla fine della riga di comando.
Nota che questo script in realtà non modifica i dati, quindi non devi stare attento a quale delimitatore usi.
Ecco un esempio di output:
>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