Ordenar datos según la segunda columna de un archivo

Resuelto Angelo asked hace 13 años • 5 respuestas

Tengo un archivo de 2 columnas y ncantidad de filas.

columna1 contiene namesy columna2 age.

Quiero ordenar el contenido de este archivo en orden ascendente según age(en la segunda columna).

El resultado debe mostrar la namepersona más joven junto con namela segunda persona más joven y así sucesivamente...

Alguna sugerencia para un shell de una sola línea o un script bash.

Angelo avatar Jun 22 '11 18:06 Angelo
Aceptado

Puedes usar la keyopción del sortcomando , que toma un "número de campo", así que si quisieras la segunda columna:

sort -k2 -n yourfile

-n, --numeric-sortcomparar según el valor numérico de la cadena

Por ejemplo:

$ cat ages.txt 
Bob 12
Jane 48
Mark 3
Tashi 54

$ sort -k2 -n ages.txt 
Mark 3
Bob 12
Jane 48
Tashi 54
Matt Ryall avatar Jun 22 '2011 11:06 Matt Ryall

Solución:

sort -k 2 -n filename

escrito más detalladamente como:

sort --key 2 --numeric-sort filename


Ejemplo:

$ cat filename
A 12
B 48
C 3

$ sort --key 2 --numeric-sort filename 
C 3
A 12
B 48

Explicación:

  • -k # : este argumento especifica la primera columna que se utilizará para ordenar. (tenga en cuenta que la columna aquí se define como un campo delimitado por espacios en blanco; el argumento -k5se ordenará comenzando con el quinto campo de cada línea, no con el quinto carácter de cada línea)

  • -n : esta opción especifica una "ordenación numérica", lo que significa que la columna debe interpretarse como una fila de números, en lugar de texto.


Más:

Otras opciones comunes incluyen:

  • -r : esta opción invierte el orden de clasificación. También se puede escribir como --reverse .
  • -i : esta opción ignora los caracteres no imprimibles. También se puede escribir como --ignore-nonprinting .
  • -b : esta opción ignora los espacios en blanco iniciales, lo cual resulta útil ya que los espacios en blanco se utilizan para determinar el número de filas. También se puede escribir como --ignore-leading-blanks .
  • -f : esta opción ignora las mayúsculas y minúsculas. "A"=="a". También se puede escribir como --ignore-case .
  • -t [nuevo separador] : esta opción hace que el preprocesamiento utilice un operador distinto del espacio. También se puede escribir como --field-separator .

Hay otras opciones, pero estas son las más comunes y útiles y las que uso con frecuencia.

DCurro avatar Dec 17 '2015 18:12 DCurro