GNU/Linux >> Znalost Linux >  >> Linux

Řazení na posledním poli řádku

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

V podstatě tento příkaz dělá:

  1. Zopakujte poslední pole na začátku oddělené mezerou (výchozí OFS)
  2. Seřaďte, vyřešte duplicitní názvy souborů pomocí úplné cesty ($0) pro řazení
  3. 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

Linux
  1. Mít krávu na příkazovém řádku Linuxu

  2. Přihlaste se do příkazového řádku Linuxu

  3. Smazat po sobě jdoucí řádky v CSV s duplicitními hodnotami v jednom poli, ale ponechat poslední řádek?

  1. Hledání poslední položky v řadě pomocí Grepu?

  2. Skočit na začátek řádku v Bashově režimu Vi?

  3. Řazení souboru odděleného tabulátory

  1. 8 tipů pro příkazový řádek Linuxu

  2. Řazení v bash

  3. Jak vytisknout poslední řádek komprimovaného souboru gz na příkazovém řádku?