La extensión de la respuesta de @AndrewSchulman, utilizando -rn como una opción global especie invierte todas las columnas. En este ejemplo, los autores con el mismo valor de matriz asociativa saldrán por orden inverso del nombre.
Por ejemplo
declare -A authors
authors=([Pushkin]=10050 [Gogol]=23 [Dostoyevsky]=9999 [Tolstoy]=23)
for k in "${!authors[@]}"
do
echo $k ' - ' ${authors["$k"]}
done | sort -rn -k3
salida se
Pushkin - 10050
Dostoyevsky - 9999
Tolstoy - 23
Gogol - 23
opciones para ordenar columnas específicas se puede proporcionar después de que el especificador de columna. es decir,
sort -k3rn
Tenga en cuenta que las claves se pueden especificar como tramos. Aquí -k3
está bien porque es el tramo final, pero para usar solo la columna 3 explícitamente (en caso de que se hayan agregado más columnas), debe especificarse como -k3,3
, De forma similar para ordenar por columna tres en orden descendente, y luego columna una en orden ascendente (que es probablemente lo que se desea en este ejemplo):
declare -A authors
authors=([Pushkin]=10050 [Gogol]=23 [Dostoyevsky]=9999 [Tolstoy]=23)
for k in "${!authors[@]}"
do
echo $k ' - ' ${authors["$k"]}
done | sort -k3,3rn -k1,1
es la salida
Pushkin - 10050
Dostoyevsky - 9999
Gogol - 23
Tolstoy - 23
Bash 4.0 añade matrices asociativas donde las claves pueden ser cadenas. –
Bueno, yo seré ... tienes razón. Solo necesita 'declarar -A autores'. –
Su solución funciona. Por lo que yo entiendo, solo ordena cadenas de salida, no los contenidos de la matriz asociativa, pero de todos modos, la salida producida es lo que necesito. – Graf