GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo ordenar esta salida 1,10,11..2

Tu mejor apuesta es canalizar a GNU sort , con GNU sort --version-sort de opción habilitada

por lo que sería oracleasm listdisks | sort --version-sort

Desde la página de información

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

En tu entrada me da

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

Si sort --version-sort no está disponible, divídalo en 2 campos:campo 1 =sin dígitos iniciales y campo 2 =número entero, e imprima los campos con TAB entre ellos. Luego usa sort en 2 campos delimitados por TAB, luego elimine la TAB. Conéctese mediante tuberías para evitar la sobrecarga de E/S. Aquí hay un ejemplo con una porción mínima de los datos del OP, más algunos registros adicionales:

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

Impresiones:

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

DETALLES:

Los one-liners de perl usan estos indicadores de línea de comandos:
-e :le dice a Perl que busque el código en línea, en lugar de en un archivo.
-n :recorrer la entrada una línea a la vez, asignándola a $_ por defecto.
-l :quita el separador de línea de entrada ("\n" en *NIX de forma predeterminada) antes de ejecutar el código en línea y añádalo al imprimir.
-p :igual que -n , pero también print la línea al final de cada ciclo (elimina print explícito ).

Dentro de la primera línea, \d es cualquier dígito (0-9), y \D es cualquier no dígito. Cada uno de estos patrones se repite 0 o más veces (usando * ). Los dos patrones se capturan usando paréntesis y se devuelven como un LIST de dos campos, que se unen en una TAB y se imprimen.

La segunda línea de Perl simplemente elimina la primera TAB, no encuentra nada (cadena vacía) e imprime la línea.

A sort en 2 campos se utilizan estas opciones:-k1,1 :ordenar en el campo 1 ASCIIbéticamente. Después:
-k2,2n :si el campo 1 es el mismo, ordenar el campo 2 numéricamente (-n opción).
Tenga en cuenta que el número de campo se repite dos veces (por ejemplo, 1,1 ), para evitar la clasificación en el resto de la línea y limitar la clasificación solo a este número de columna.


Linux
  1. Cómo guardar la salida del comando en un archivo en Linux

  2. ¿Cómo ordenar la salida Du por tamaño?

  3. ¿Cómo recordar cómo usar la redirección?

  4. ¿Cómo crear una salida virtual en Pulseaudio?

  5. ¿Ordenar salida por columna?

¿Cómo eliminar este directorio indeleble?

¿Cómo guardar la salida de este comando awk en un archivo?

Cómo ordenar un archivo en el lugar

¿Cómo puedo filtrar resultados únicos de la salida grep?

tcpdump:¿cómo obtener una salida grepable?

¿Cómo ordenar la salida de ps por hora de inicio del proceso?