Red de conocimiento de recetas - Recetas caseras - Cómo utilizar el comando ordenar

Cómo utilizar el comando ordenar

La función del comando ordenar es ordenar las líneas del archivo. El comando ordenar tiene muchas opciones muy útiles y originalmente se usó para realizar varias operaciones de clasificación del contenido de archivos en formato de base de datos. Sígueme a continuación para obtener más información al respecto.

Cómo utilizar el comando ordenar

1 Cómo funciona la clasificación

La clasificación trata cada línea del archivo como una unidad y las compara entre sí. El principio de comparación es desde el primer carácter hasta el siguiente para comparar por valor ASCII y, finalmente, generar en orden ascendente.

[rocrocket@rocrocket programación]$ cat seq.txt

Plátano

Manzana

Pera

Naranja

[rocrocket@rocrocket programación]$ sort seq.txt

Manzana

Plátano

Naranja

Pera

Opción 2 -u para ordenar

Simplemente elimina filas duplicadas de las filas de salida.

[rocrocket@rocrocket programación]$ cat seq.txt

Plátano

Manzana

Pera

Naranja

Pera

[rocrocket@programación rocrocket]$ sort seq.txt

Manzana

Plátano

Naranja

Pera

Pera

Pera

[programación rocrocket@rocrocket]$ sort -u seq.txt

manzana

plátano

naranja

pera

pera

-u opción eliminada sin piedad debido a duplicación Got peras.

3 opciones -r para ordenar

El método de clasificación predeterminado es orden ascendente. Si desea cambiarlo a orden descendente, simplemente agregue -r.

[rocrocket@programación de rocrocket]$ número de gato.txt

1

3

5

2

4

[rocrocket@programación rocrocket]$ ordenar número.txt

1

2

3

4

5

[rocrocket@programación rocrocket]$ sort -r número.txt

5

4

3

2

1

4 La opción -o de ordenar

Debido a la salida predeterminada de ordenar a salida estándar, necesita usar la redirección para escribir los resultados en un archivo, como ordenar nombre de archivo > nuevoarchivo

Pero.

[programación rocrocket@rocrocket]$ sort -r número.txt gt; número.txt

[programación rocrocket@rocrocket]$ cat número.txt

[programación rocrocket@rocrocket]$

Mira, borra los números.

Es entonces cuando aparece la opción -o, que consigue solucionar el problema y permite escribir de forma segura los resultados en el archivo original. Esta es quizás la única ventaja que tiene -o sobre la redirección.

[rocrocket@programación de rocrocket]$ número de gato.txt

1

3

5

2

4

[programación rocrocket@rocrocket]$ sort -r número.txt -o número.txt

[programación rocrocket@rocrocket]$ número de gato. txt

5

4

3

2

1

5 ordenar La opción -n

¿Alguna vez te has encontrado con una situación en la que 10 es menor que 2? Esto sucede porque el programa de clasificación clasifica los números carácter por carácter. El clasificador comparará 1 y 2 primero, y obviamente 1 es más pequeño, por lo que pondrá 10 antes de 2. Así es como siempre ha funcionado la clasificación.

Si queremos cambiar esto, necesitamos usar la opción -n para indicarle al clasificador que ordene por valor.

[rocrocket@programación rocrocket]$ número de gato.txt

1

10

19

11

2

5

[rocrocket@programación rocrocket]$ ordenar número.txt

1

10

11

19

2

5

[programación rocrocket@rocrocket]$ ordenar -n número .txt

1

2

5

10

11

19

6 opciones ordenadas -t y -k

Si hay un archivo con el siguiente contenido:

[rocrocket@rocrocket programación]$ cat facebook.txt

p>

plátano: 30:5,5

manzana: 10:2,5

pera: 90:2,3

naranja: 20: 3.4

El archivo tiene tres columnas. La primera columna representa el tipo de fruta, la segunda columna representa la cantidad de fruta y la tercera columna representa el precio de la fruta.

Así que quiero ordenar por el número de frutas, es decir, por la segunda columna, ¿cómo puedo lograr esto usando la clasificación?

Afortunadamente, sort proporciona la opción -t, que puede ir seguida de un separador. (Esto no recuerda a la opción -d de cortar y pegar, ****~~~)

Después de especificar el carácter separador, puede usar -k para especificar el número de columnas.

[rocrocket@programación rocrocket]$ sort -n -k 2 -t: facebook.txt

Apple: 10:2.5

Naranja: 20:3.4

Plátano: 30:5.5

Peras: 90:2.3

Usamos dos puntos como carácter separador y ordenamos en orden ascendente en la segunda columna, el resultado es sorprendente satisfacer.

Otras 7 opciones de clasificación de uso común

-f convierte todas las letras minúsculas en mayúsculas para compararlas, es decir, ignora las mayúsculas y las minúsculas

-c Compruebe si el archivo está ordenado. Si la clasificación es incorrecta, genere la información de que la primera línea está ordenada incorrectamente y devuelva 1

-C Compruebe si el archivo está ordenado. Si la clasificación es correcta, el contenido. no se generará y solo se devolverá 1

p>

-C comprueba si el archivo está ordenado. Si la clasificación es correcta, el contenido no se generará.

-M ordenará por mes, como JAN menos que FEB, etc.

-b ignorará cualquier espacio en blanco anterior en cada línea e iniciará la comparación desde el primer carácter visible.

A veces, al aprender scripts, encontrará que el comando de clasificación va seguido de un montón de cosas, como -k1, 2 o -k1.2 -k3.4, lo cual es un poco extraño. . Hoy resolveremos este problema. -k opción!

1 Materiales de preparación

$ cat facebook.txt

google 110 5000

baidu 100 5000

guge 50 3000

sohu 100 4500

El primer campo es el nombre de la empresa, el segundo campo es el número de personas de la empresa y el tercer campo es el salario promedio de los empleados. (No crean nada más que el nombre de la empresa, está todo escrito en vano^_^)

2 Quiero que los archivos estén ordenados alfabéticamente por empresa, es decir, por el primer dominio: (Este archivo facebook.txt Hay tres campos)

$ sort -t -k 1 facebook.txt

baidu 100 5000

google 110 5000

guge 50 3000

sohu 100 4500

Mira, es solo cuestión de configurar -k 1. (En realidad, esto no es estricto, como verás más adelante)

3 Quiero que facebook.txt esté ordenado por el número de empresas

$ sort -n -t -k 2 facebook .txt

guge 50 3000

baidu 100 5000

sohu 100 4500

google 110 5000

No es necesario Explique, creo que ya lo comprende.

Sin embargo, hay un problema aquí, es decir, Baidu y Sohu tienen el mismo número de empresas, ambas con 100 personas. ¿Qué debemos hacer en este momento? De acuerdo con las reglas predeterminadas, el primer nombre de dominio se ordena en orden ascendente, por lo que baidu se clasifica antes que sohu.

4 Quiero que facebook.txt esté ordenado por el número de empresas y también por el salario promedio de los empleados en orden ascendente:

$ sort -n -t -k 2 -k 3 facebook.txt

p>

guge 50 3000

sohu 100 4500

baidu 100 5000

google 110 5000

Mira, agregamos A -k2 -k3 para resolver el problema. La opción de colocar y ordenar a la derecha admite esta configuración, es decir, establecer la prioridad de clasificación de dominios, de modo que el segundo dominio se ordenará primero y, si son iguales, se ordenará el tercer dominio. txt

$ sort -n -t -k 3r -k 2 facebook.txt

Baidu 100 5000

Google 110 5000

Sohu 100 4500

Google 50 3000

Aquí hay un pequeño truco. Si miras con atención, puedes encontrar una r minúscula después de -k 3. Piénselo, combinado con la respuesta de nuestro artículo anterior, ¿puede obtener la respuesta? Revelado: r y -r tienen la misma función, es decir, el orden inverso. Dado que la clasificación por defecto es ascendente, debe agregar r para indicar que el tercer campo (salario promedio de los empleados) está en orden descendente. Aquí también puedes agregar n, lo que significa que al ordenar este campo, debes ordenar por el tamaño del valor, por ejemplo:

$ sort -t -k 3nr -k 2n facebook.txt

baidu 100 5000

google 110 5000

sohu 100 4500

guge 50 3000

Mira, somos los mejores La opción -n se eliminó y se agregó a cada opción -k.

6 Formato de sintaxis específico de la opción -k

Para comprender más, es necesario tener algunos conocimientos teóricos. Necesita conocer el formato de sintaxis de la opción -k, que es el siguiente:

[ FStart [ .CStart ] ]. [Modificador] [ , [ FEnd [ .CEnd ] ] 12 A veces, después de ordenar los comandos, verás los símbolos 1 -2, ¿qué está pasando?

La clasificación más reciente explica esta sintaxis:

En sistemas más antiguos, `sort? admite la sintaxis obsoleta de origen cero ` POS1 [-POS2]? POSIX 1003.1-2001 (*Nota: Conformidad estándar:::) no permite esto;

Resulta que esta notación antigua está obsoleta, ¡y ahora puedes despreciar con razón las escrituras que la utilizan!

(En caso de que todavía existan scripts antiguos, esta notación se usa nuevamente, con un signo más que indica el inicio y un signo menos que indica el final. Lo más importante es que este conteo comienza en 0, el primer campo utilizado para llamarse el primer campo, aquí se representa como el campo 0 (el segundo carácter mencionado anteriormente se representa aquí como el primer carácter).