Articulo de referencia

ordenar (Unix)

Plan 9: [[MIT License]]"},"website":{"wt":""}},"i":0}}]}"> En informática , `sort` es un programa de línea de comandos estándar de los sistemas operativos Unix y similares , que...

En informática , `sort` es un programa de línea de comandos estándar de los sistemas operativos Unix y similares , que imprime las líneas de su entrada o la concatenación de todos los archivos listados en su lista de argumentos en orden ascendente. 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. Por defecto, toda la entrada se toma como clave de ordenación. El espacio en blanco es el separador de campos 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 ordenación. El orden de ordenación se ve afectado por la configuración regional del entorno. [ 1 ]-r

Historia

Un sortcomando que invoca una función de ordenación general se implementó por primera vez en Multics . [ 2 ] Posteriormente, apareció en la versión 1 de Unix . Esta versión fue escrita originalmente por Ken Thompson en los Laboratorios Bell de AT&T . Para la versión 4, Thompson la había modificado para usar tuberías , pero la función de ordenación conservó una opción para nombrar el archivo de salida porque se usaba para ordenar un archivo en el mismo lugar. En la versión 5 , Thompson inventó el guion ("-") para representar la entrada estándar . [ 3 ]

sortforma parte de la Guía de Portabilidad X/Open, número 2 (1987). De ahí se heredó en POSIX . [ 4 ]

La versión de sort incluida en GNU coreutils fue escrita por Mike Haertel y Paul Eggert. [ 1 ] Esta implementación emplea el algoritmo mergesort . Ofrece la opción de ordenar en paralelo, aunque la mejora del rendimiento disminuye después de 8 hilos. [ 5 ] GNU parallel también proporciona un envoltorio para realizar invocaciones paralelas de sort con características de mejora del rendimiento similares: en un sistema de 48 núcleos, la aceleración es de aproximadamente 3×. [ 6 ]

El comando sort también se ha portado al sistema operativo IBM i , siendo accesible desde Qshell compatible con POSIX . [ 7 ]

Puertos que no son POSIX

Existen comandos similares en muchos otros sistemas operativos; por ejemplo, un comando de ordenación forma parte de las herramientas MSX-DOS2 de ASCII para MSX-DOS versión 2. [ 8 ]

El proyecto "uutils" proporciona una implementación multiplataforma sortescrita en Rust , con soporte para todas las opciones de GNU coreutil. Utiliza la función par_sort_byor par_sort_unstable_byde Rayon, la biblioteca multihilo de Rust, implementando un algoritmo de ordenación por fusión adaptativo inspirado en timsort o una variación de quicksort que evita patrones . [ 9 ]

Sintaxis

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

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

Parámetros

En la tabla siguiente, "Corto" indica que solo se admite la versión corta (de una letra) de la opción. Las opciones largas son originalmente una extensión de GNU y no forman parte de ninguna versión de SUS ni de POSIX. Posteriormente, también fueron adoptadas por FreeBSD.

Ejemplos

Ordenar un archivo alfabéticamente

$ 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

Esta -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 redirigir al comando ` sort` para producir una lista de archivos ordenados por tamaño (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 los archivos 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:

$ find . -name "*.tex" -ls | sort -k 7n 

Columnas o campos

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

$ 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 varios campos

Esta -k m,nopción le permite ordenar por una clave que potencialmente está compuesta por varios campos (comience en la columna m, termine en la columna n):

$ cuota de gato fred 2000 bob 1000 an 1000 chad 1000 don 1500 eric 500
$ ordenar -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 por clave comenzando y terminando con la columna 2, y ordenando numéricamente. Si -k2se usa en su lugar, 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 resuelvan los empates utilizando el valor de la columna 1, ordenando alfabéticamente por defecto. Nótese 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 '|' zipcode 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 de dólar del intérprete de comandos [ 10 ] [ 11 ] para especificar la tabulación como una secuencia de escape de C.

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

Ordenar en orden inverso

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

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

Ordenar aleatoriamente

La implementación de GNU tiene una -R --random-sortopción basada en funciones hash; esto no es una mezcla completamente aleatoria porque agrupará las líneas idénticas. La utilidad shuf de Unix proporciona una verdadera ordenación aleatoria .

Ordenar por versión

La implementación de GNU incluye una -V --version-sortopción para ordenar de forma natural los 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, se omiten los ceros iniciales; a mayor número de dígitos, mayor es el valor; 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 diferente en ese bucle determina qué texto es mayor. Esto funciona para direcciones IP, cadenas de versión de paquetes Debian y tareas similares donde se incluyen números de longitud variable en las cadenas.

Véase también

Referencias

  1. 1 2Manual de usuario de Linux – Comandos de usuariosort(1)  
  2. "Comandos de Multics" . www.multicians.org .
  3. McIlroy, MD (1987). Un lector de Research Unix: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
  4. Shell and Utilities Reference, The Single UNIX Specification , Versión 5 de The Open Groupsort  
  5. "Invocación de ordenación (GNU Coreutils 9.8)" .
  6. "NOMBRE — Documentación de GNU Parallel 20250922" . www.gnu.org .
  7. IBM . "IBM System i Versión 7.2 Programación Qshell" (PDF) . IBM . Consultado el 05-09-2020 .
  8. ^ "Manual del usuario de herramientas MSX-DOS2 - HERRAMIENTAS MSX-DOS2 ユーザーズマニュアル" . 1 de abril de 1993 - vía Internet Archive.
  9. "ParallelSliceMut en rayon::slice - Rust" . docs.rs .
  10. "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 $'cadena' se tratan de forma especial. La palabra se expande a cadena, y los caracteres escapados con barra invertida se reemplazan según lo especificado por el estándar ANSI C.
  11. Fowler, Glenn S.; Korn, David G. ; Vo, Kiem-Phong. "Preguntas frecuentes de KornShell" . Archivado del original el 27 de mayo de 2013. Recuperado 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 '...'.

Lecturas adicionales

  • Shotts (Jr), William E. (2012). La línea de comandos de Linux: una introducción completa . No Starch Press . ISBN 978-1593273897.
  • McElhearn, Kirk (2006). La línea de comandos de Mac OS X: Unix bajo el capó . John Wiley & Sons . ISBN 978-0470113851.
Obtenido de " https://en.wikipedia.org/w/index.php?title=Sort_(Unix)&oldid=1359137138 "