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.