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 concatenación de todos los archivos enumerados en su lista de argumentos en orden ordenado. La clasificación se realiza en función de una o más claves de clasificación extraídas de cada línea de entrada. De forma predeterminada, toda la entrada se toma como clave de clasificación. El espacio en blanco es el separador de campos predeterminado. El comando admite una serie de 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 clasificación general se implementó por primera vez en Multics . [1] Posteriormente, apareció en la Versión 1 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 tuberías , pero ordenar conservaba 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 clasificación por fusión .

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

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

Sintaxis

ordenar [OPCIÓN]... [ARCHIVO]...

Sin FILEo cuando FILEes -, el comando se 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 el 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 para ordenar y producir una lista de archivos ordenados por tamaño de archivo (ascendente):

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

El comando buscar 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:

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

Columnas o campos

Utilice la -kopción para ordenar en una determinada columna. Por ejemplo, utilice " -k 2" para ordenar en la segunda columna. En versiones antiguas de clasificación, la +1opción hacía que el programa ordenara según 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 en múltiples campos

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

$ cat  cuota 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 clasificación se realiza utilizando la columna 2. -k2,2nEspecifica la clasificación según la clave que comienza y termina en la columna 2, y la clasificación numéricamente. Si -k2se utiliza en su lugar, la clave de clasificació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 romper empates usando el valor en la columna 1, ordenando alfabéticamente de forma predeterminada. Tenga en cuenta que bob y chad tienen la misma cuota y están ordenados alfabéticamente en el resultado final.

Ordenar un archivo delimitado por tuberías

$ ordenar  -k2,2,-k1,1  -t '|'  código postal Adán|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 cotización de 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 al revés

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 GNU tiene una -R --random-sortopción basada en hash; Esta no es una mezcla aleatoria completa porque ordenará líneas idénticas. La utilidad shuf de Unix proporciona una verdadera clasificación aleatoria .

Ordenar por versión

La implementación GNU tiene una -V --version-sortopción que es una especie 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, omitiendo los ceros iniciales, más dígitos significa 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 números de longitud variable están incrustados en cadenas.

Ver también

Referencias

  1. ^ "Comandos múltiples". www.multicians.org .
  2. ^ McIlroy, Doctor en Medicina (1987). Un lector de Research Unix: extractos comentados del Manual del programador, 1971-1986 (PDF) (Informe técnico). CSTR. Laboratorios Bell. 139.
  3. ^ "sort(1): ordenar líneas de archivos de texto - página de 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 . "Qshell de programación de 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 del formato $'cadena' se tratan de forma especial. La palabra se expande a una cadena, con caracteres de escape con 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 literal de cadena $'...' se agregó a ksh93 para resolver el problema de ingresar caracteres especiales en los scripts. Utiliza reglas ANSI-C para traducir la cadena entre '...'.

Otras lecturas

enlaces externos