GNU/Linux >> Linux Esercitazione >  >> Linux

Come ordinare questo output 1,10,11..2

La cosa migliore è fare il piping a GNU sort , con GNU sort è --version-sort opzione abilitata

quindi sarebbe oracleasm listdisks | sort --version-sort

Dalla pagina delle informazioni

--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::.)

Al tuo input mi dà

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

Se sort --version-sort non è disponibile, diviso in 2 campi:campo 1 =non cifre iniziali e campo 2 =numero intero e stampa i campi separati da TAB. Quindi usa sort su 2 campi delimitati da TAB, quindi rimuovere il TAB. Collegare tramite tubi per evitare il sovraccarico I/O. Ecco un esempio con una porzione minima dei dati dall'OP, più alcuni record aggiuntivi:

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//'

Stampe:

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

DETTAGLI:

Gli one-liner perl usano questi flag della riga di comando:
-e :dice a Perl di cercare il codice in linea, invece che in un file.
-n :passa sopra l'input una riga alla volta, assegnandolo a $_ per impostazione predefinita.
-l :rimuove il separatore di riga di input ("\n" su *NIX per impostazione predefinita) prima di eseguire il codice in linea e aggiungerlo durante la stampa.
-p :uguale a -n , ma anche print la riga alla fine di ogni ciclo (elimina print esplicito ).

All'interno della prima riga, \d è qualsiasi cifra (0-9) e \D è qualsiasi non cifra. Ciascuno di questi schemi viene ripetuto 0 o più volte (usando * ). I due modelli vengono catturati utilizzando le parentesi e restituiti come LIST di due campi, che vengono uniti su un TAB e stampati.

Il secondo one-liner Perl rimuove semplicemente il primo TAB trova senza niente (stringa vuota) e stampa la riga.

A sort su 2 campi, vengono utilizzate queste opzioni:-k1,1 :ordina sul campo 1 in modo ASCIIbetico. Quindi:
-k2,2n :se il campo 1 è lo stesso, ordina il campo 2 numericamente (-n opzione).
Tieni presente che il numero del campo viene ripetuto due volte (ad esempio, 1,1 ), per impedire l'ordinamento sul resto della riga e limitare l'ordinamento solo a questo numero di colonna.


Linux
  1. Come creare un output virtuale in Pulseaudio?

  2. Ecco come funziona un server Linux

  3. Come salvare l'output di questo comando awk su file?

  4. tcpdump:come ottenere un output grepable?

  5. Come ordinare l'output di ps in base all'ora di inizio del processo?

Come assegnare l'output di un comando Linux a una variabile

Come eliminare questa directory indelebile?

Come posso filtrare i risultati univoci dall'output di grep?

Come posso ordinare du -h output per dimensione

Come eseguire il grep dell'output di ps con le intestazioni

Come interrompere l'output del ping?