Ordenación de los valores del Map en Bash en orden descendente
He declarado un mapa en bash de la siguiente manera:
declare -A myMap
myMap=( [A:B:C:D]=813.0 [P:Q:R:S]=2346957.02 [W:X:Y:Z]=53831.93 [E:F:G:H]=113770.0)
Quiero dividir la cadena en clave utilizando el delimitador (:) y obtener el resultado en orden descendente de valor de esta manera:
P - Q - R - S - 2346957.02
E - F - G - H - 113770.0
W - X - Y - Z - 53831.93
A - B - C - D - 813.0
El código que estoy intentando es el siguiente:
for k in "${!myMap[@]}"
do
arrIN=(${k//:/ })
echo ${arrIN[0]} ' - ' ${arrIN[1]} ' - ' ${arrIN[2]} ' - ' ${arrIN[3]} ' - ' ${myMap["$k"]}
done | sort ${myMap["$k"]}
Pero la salida usando mi código es la siguiente:
E - F - G - H - 113770.0
W - X - Y - Z - 53831.93
P - Q - R - S - 2346957.02
A - B - C - D - 813.0
¿Hay alguna manera fácil de lograr esto?
davy.ai
Sí, en lugar de ordenar la salida del bucle, puedes usar el comando sort directamente en el array asociativo con el siguiente comando:
La opción -rk5 le indica al comando sort que ordene en orden inverso por la quinta columna (que es la columna de valor en nuestra salida). Esto te dará la salida deseada: