awk '{print $NF,$0}' file | sort | cut -f2- -d' '
V podstatě tento příkaz dělá:
- Zopakujte poslední pole na začátku oddělené mezerou (výchozí OFS)
- Seřaďte, vyřešte duplicitní názvy souborů pomocí úplné cesty ($0) pro řazení
- Vystřihněte opakované první pole, f2- znamená od druhého pole k poslednímu
Jednořádková v perlu pro obrácení pořadí polí v řádku:
perl -lne 'print join " ", reverse split / /'
Můžete to použít jednou, výstup k třídění pomocí potrubí, pak to potrubím zpět a dosáhnete toho, co chcete. Můžete změnit / /
do / +/
tak to stlačuje mezery. A samozřejmě můžete použít libovolný regulární výraz, kterým chcete řádky rozdělit.
něco takového
awk '{print $NF"|"$0}' file | sort -t"|" -k1 | awk -F"|" '{print $NF }'
Zde je příkazový řádek Perlu (všimněte si, že váš shell může vyžadovat, abyste opustili $
s):
perl -e "print sort {(split '/', $a)[-1] <=> (split '/', $b)[-1]} <>"
Jednoduše do něj seznam umístěte potrubím nebo, pokud je seznam v souboru, vložte název souboru na konec příkazového řádku.
Všimněte si, že tento skript ve skutečnosti nemění data, takže si nemusíte dávat pozor na to, jaký oddělovač používáte.
Zde je ukázkový výstup:
>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
Provést instalaci, ale ne do výchozích adresářů?
Jak mohu správně spouštět skripty příkazového řádku Perl one-liner?