stringtranslate.com

ordenar (Unix)

En informática , sort es un programa de línea de comandos estándar de Unix y sistemas operativos similares a Unix , que imprime las líneas de su entrada o la concatenación de todos los archivos enumerados en su lista de argumentos en orden ordenado. La ordenación se realiza en función de una o más claves de ordenación extraídas de cada línea de entrada. De forma predeterminada, se toma toda la entrada como clave de ordenación. El espacio en blanco es el separador de campo predeterminado. El comando admite varias opciones de línea de comandos que pueden variar según la implementación. Por ejemplo, el indicador " " invertirá el orden de clasificación.-r

Historia

Un sortcomando que invoca una función de ordenación general se implementó por primera vez en Multics . [1] Más tarde, apareció en la versión 1 de Unix . Esta versión fue escrita originalmente por Ken Thompson en AT&T Bell Laboratories . En la versión 4, Thompson lo había modificado para usar pipes , pero sort mantuvo una opción para nombrar el archivo de salida porque se usaba para ordenar un archivo en su lugar. En la versión 5 , Thompson inventó "-" para representar la entrada estándar . [2]

La versión de sort incluida en GNU coreutils fue escrita por Mike Haertel y Paul Eggert. [3] Esta implementación emplea el algoritmo de ordenamiento por fusión .

Hay comandos similares disponibles en muchos otros sistemas operativos, por ejemplo, un comando sort es parte de las herramientas MSX-DOS2 de ASCII para MSX-DOS versión 2. [4]

El comando sort también ha sido portado al sistema operativo IBM i . [5]

Sintaxis

ordenar [OPCION]... [ARCHIVO]...

Si no hay FILE, o cuando FILEes -, el comando lee desde la entrada estándar .

Parámetros

Ejemplos

Ordenar un archivo en orden alfabético

Directorio  telefónico de gatos Smith, Brett 555-4321 Doe, John 555-1234 Doe, Jane 555-3214 Avery, Cory 555-4132 Fogarty, Suzie 555-2314
$ ordenar  directorio telefónico Avery, Cory 555-4132 Doe, Jane 555-3214 Doe, John 555-1234 Fogarty, Suzie 555-2314 Smith, Brett 555-4321

Ordenar por número

La -nopción hace que el programa ordene según un valor numérico. El comando du produce una salida que comienza con un número, el tamaño del archivo, por lo que su salida se puede canalizar a sort para producir una lista de archivos ordenados por tamaño de archivo (en orden ascendente):

$ de  /bin/* | ordenar -n 4 /bin/nombre de dominio 24 /bin/ls 102 /bin/sh 304 /bin/csh   

El comando find con la opción ls imprime los tamaños de archivo en el séptimo campo, por lo que se produce una lista de los archivos LaTeX ordenados por tamaño de archivo de la siguiente manera:

$ buscar  .  -nombre "*.tex" -ls | ordenar -k 7n      

Columnas o campos

Utilice la -kopción para ordenar en una columna determinada. Por ejemplo, utilice " -k 2" para ordenar en la segunda columna. En versiones anteriores de sort, la +1opción hacía que el programa ordenara en la segunda columna de datos ( +2para la tercera, etc.). Este uso está en desuso.

$ gato  código postal Adam 12345 Bob 34567 Joe 56789 Sam 45678 Wendy 23456
$ sort  -k  2n  código postal Adam 12345 Wendy 23456 Bob 34567 Sam 45678 Joe 56789

Ordenar por múltiples campos

La -k m,nopción le permite ordenar según una clave que potencialmente está compuesta de múltiples campos (comenzar en la columna m, finalizar en la columna n):

$  cuota de gato fred 2000 bob 1000 an 1000 chad 1000 don 1500 eric 500
$ sort  -k2,2n  -k1,1  cuota eric 500 an 1000 bob 1000 chad 1000 don 1500 fred 2000

Aquí, la primera ordenación se realiza utilizando la columna 2. -k2,2nespecifica la ordenación según la clave que comienza y termina con la columna 2, y la ordenación numérica. Si -k2se utiliza en cambio, la clave de ordenación comenzaría en la columna 2 y se extendería hasta el final de la línea, abarcando todos los campos intermedios. -k1,1dicta que se rompan los empates utilizando el valor de la columna 1, ordenando alfabéticamente de forma predeterminada. Tenga en cuenta que bob y chad tienen la misma cuota y se ordenan alfabéticamente en el resultado final.

Ordenar un archivo delimitado por tuberías

$ sort  -k2,2,-k1,1  -t '|'  código postal Adam|12345 Wendy|23456 Sam|45678 Joe|56789 Bob|34567

Ordenar un archivo delimitado por tabulaciones

Para ordenar un archivo con valores separados por tabulaciones, es necesario especificar un carácter de tabulación como delimitador de columna. Esta ilustración utiliza la notación de comillas en dólares del shell [6] [7] para especificar la tabulación como una secuencia de escape de C.

$ sort  -k2,2  -t $'\t' directorio telefónico Doe, John 555-1234 Fogarty, Suzie 555-2314 Doe, Jane 555-3214 Avery, Cory 555-4132 Smith, Brett 555-4321   

Ordenar en reversa

La -ropción simplemente invierte el orden de clasificación:

$ sort  -rk  2n  código postal Joe 56789 Sam 45678 Bob 34567 Wendy 23456 Adam 12345

Ordenar al azar

La implementación de GNU tiene una -R --random-sortopción basada en hash; no se trata de una ordenación aleatoria completa porque ordenará juntas las líneas idénticas. La utilidad Unix shuf proporciona una ordenación aleatoria verdadera .

Ordenar por versión

La implementación de GNU tiene una -V --version-sortopción que es una clasificación natural de números (de versión) dentro del texto. Dos cadenas de texto que se van a comparar se dividen en bloques de letras y bloques de dígitos. Los bloques de letras se comparan alfanuméricamente y los bloques de dígitos se comparan numéricamente (es decir, salteando los ceros iniciales, más dígitos significan más grande, de lo contrario, los dígitos más a la izquierda que difieren determinan el resultado). Los bloques se comparan de izquierda a derecha y el primer bloque no igual en ese bucle decide qué texto es más grande. Esto funciona para direcciones IP, cadenas de versiones de paquetes Debian y tareas similares donde se incrustan números de longitud variable en las cadenas.

Véase también

Referencias

  1. ^ "Comandos Multics". www.multicians.org .
  2. ^ McIlroy, MD (1987). Un lector de Unix para investigación: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
  3. ^ "sort(1): ordena líneas de archivos de texto - Página del manual de Linux". linux.die.net .
  4. ^ "Manual del usuario de herramientas MSX-DOS2 - HERRAMIENTAS MSX-DOS2 ユ ー ザ ー ズ マ ニ ュ ア ル". 1 de abril de 1993 - vía Internet Archive.
  5. ^ IBM . "Programación Qshell para IBM System i versión 7.2" (PDF) . IBM . Consultado el 5 de septiembre de 2020 .
  6. ^ "Manual de referencia de GNU Bash, para Bash, versión 4.2: Sección 3.1.2.4 Citas ANSI-C". Free Software Foundation, Inc. 28 de diciembre de 2010. Consultado el 1 de febrero de 2013. Las palabras de la forma $'string' reciben un tratamiento especial. La palabra se expande a cadena, con caracteres escapados por barra invertida reemplazados según lo especificado por el estándar ANSI C.
  7. ^ Fowler, Glenn S.; Korn, David G .; Vo, Kiem-Phong. "Preguntas frecuentes sobre KornShell". Archivado desde el original el 27 de mayo de 2013. Consultado el 3 de marzo de 2015. La sintaxis de literal de cadena $'...' se agregó a ksh93 para resolver el problema de ingresar caracteres especiales en scripts. Utiliza reglas ANSI-C para traducir la cadena entre '...'.

Lectura adicional

Enlaces externos