扩展从@AndrewSchulman答案,使用-rn作为一个全球性的排序选项逆转所有列。在本例中,具有相同关联数组值的作者将按名称的相反顺序输出。
例如
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
排序特定列将输出
Pushkin - 10050
Dostoyevsky - 9999
Tolstoy - 23
Gogol - 23
选项可以在列说明后提供。 即
sort -k3rn
注意,键可以被指定为跨度。这里-k3
恰好是很好,因为它是最后的跨度,但只使用第3列明确(在案件的进一步列添加),它应该被指定为-k3,3
, 同样以三列按降序排序,然后列一个以升序(这可能是什么是在这个例子中需要的话):
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
将输出
Pushkin - 10050
Dostoyevsky - 9999
Gogol - 23
Tolstoy - 23
击4.0增加关联数组,其中键可以是字符串。 –
好吧,我会......你说得对。它只需要'declare -A authors'。 –
您的解决方案有效。据我了解,它只是排序输出字符串,而不是关联数组的内容,但无论如何,产生的输出是我所需要的。 – Graf