GNU/Linux >> Znalost Linux >  >> Linux

Jak seřadit tento výstup 1,10,11..2

Nejlepším řešením je přejít na GNU sort , s GNU sort 's --version-sort možnost povolena

takže by to bylo oracleasm listdisks | sort --version-sort

Z informační stránky

--version-sort’
     Sort by version name and number.  It behaves like a standard sort,
     except that each sequence of decimal digits is treated numerically
     as an index/version number.  (*Note Details about version sort::.)

Na vašem vstupu mi to dává

DATA1
DATA2
DATA3
DATA4
DATA5
DATA6
DATA7
DATA8
DATA9
DATA10
DATA11
DATA12
FRA1
FRA2
FRA3
FRA10
FRA11
OCR1
OCR2
OCR3

Pokud sort --version-sort není k dispozici, rozdělte do 2 polí:pole 1 =úvodní nečíslice a pole 2 =celé číslo a vytiskněte pole s TAB mezi nimi. Poté použijte sort na 2 polích oddělených TAB a poté TAB odeberte. Připojte pomocí potrubí, abyste se vyhnuli režii I/O. Zde je příklad s minimální částí dat z OP plus několik dalších záznamů:

echo 1 10 2 11 DATA DATA1 DATA10 DATA11 DATA2 FRA FRA1 FRA10 FRA11 FRA2 | \
    xargs -n1 | \
    perl -lne 'print join "\t", /(\D*)(\d*)/' | \
    sort -k1,1 -k2,2n | \
    perl -pe 's/\t//'

Tiskne:

1
10
11
2
DATA
DATA1
DATA2
DATA10
DATA11
FRA
FRA1
FRA2
FRA10
FRA11

PODROBNOSTI:

Jednořádkové perlské řádky používají tyto příznaky příkazového řádku:
-e :říká Perlu, aby hledal kód in-line, nikoli v souboru.
-n :smyčka přes vstup jeden řádek po druhém, přiřazení k $_ ve výchozím stavu.
-l :odstraňte oddělovač vstupních řádků ("\n" na *NIX ve výchozím nastavení) před spuštěním kódu v řádku a připojte jej při tisku.
-p :stejné jako -n , ale také print řádek na konci každé smyčky (eliminuje explicitní print ).

V rámci prvního jednoho řádku \d je libovolná číslice (0-9) a \D je jakákoli nečíslice. Každý z těchto vzorů se opakuje 0 nebo vícekrát (pomocí * ). Tyto dva vzory jsou zachyceny pomocí závorek a vráceny jako LIST dvou polí, která jsou spojena na TAB a vytištěna.

Druhý jednořádkový Perl jednoduše odstraní první TAB, nenajde nic (prázdný řetězec) a vytiskne řádek.

Na sort na 2 polích jsou použity tyto možnosti:-k1,1 :řazení na poli 1 ASCIIbeticky. Pak:
-k2,2n :pokud je pole 1 stejné, seřaďte podle pole 2 číselně (-n volba).
Všimněte si, že číslo pole se opakuje dvakrát (např. 1,1 ), abyste zabránili řazení na zbytku řádku a omezili řazení pouze na toto číslo sloupce.


Linux
  1. Jak uložit výstup příkazu do souboru v Linuxu

  2. Jak seřadit výstup Du podle velikosti?

  3. Seřadit výstup podle sloupce?

  1. Takto funguje linuxový server

  2. Jak uložit výstup tohoto příkazu awk do souboru?

  3. Jak mohu odfiltrovat jedinečné výsledky z výstupu grep?

  1. Jak mohu seřadit výstup du -h podle velikosti

  2. Jak grep ps výstup s hlavičkami

  3. Jak zastavit výstup ping?