Ordenar datos según la segunda columna de un archivo
Tengo un archivo de 2 columnas y n
cantidad de filas.
columna1 contiene names
y columna2 age
.
Quiero ordenar el contenido de este archivo en orden ascendente según age
(en la segunda columna).
El resultado debe mostrar la name
persona más joven junto con name
la segunda persona más joven y así sucesivamente...
Alguna sugerencia para un shell de una sola línea o un script bash.
Puedes usar la key
opción del sort
comando , que toma un "número de campo", así que si quisieras la segunda columna:
sort -k2 -n yourfile
-n
,--numeric-sort
comparar 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
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
-k5
se 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.