ファイル名をキーとして、数値を値として持つ配列があります。
MYARRAY[00001.jpg] = 31
MYARRAY[00002.jpg] = 200
MYARRAY[00003.jpg] = 98
それらを値順に並べ替える必要があります。私がやっている
IFS=$'\n' SORTED=($(sort <<<"${MYARRAY[*]}"))
しかし、私はキーを失い、数値のキーを持っています。
望ましい出力は
00001.jpg:31
00003.jpg:98
00002.jpg:200
どうすればこのような種類のキーを保持できますか?
キーにコロンや改行が含まれておらず、値に改行が含まれていないと仮定します。
for key in "${!MYARRAY[@]}"; do
printf '%s:%s\n' "$key" "${MYARRAY[$key]}"
done | sort -t : -k 2n
値で指定された順序でキーを配置する必要がある場合は、出力を読み戻します。
IFS=$'\n'; set -f
sorted_keys=($(
for key in "${!MYARRAY[@]}"; do
printf '%s:%s\n' "$key" "${MYARRAY[$key]}"
done | sort -t : -k 2n | sed 's/:.*//'))
unset IFS; set +f