擴展從@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