Rozszerzanie odpowiedź od @AndrewSchulman korzystając -rn jako opcja sortowania globalnej odwraca wszystkie kolumny. W tym przykładzie autorzy o tej samej wartości tablicy asocjacyjnej będą wyprowadzani przez odwrotną kolejność nazw.
Na przykład
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
wyjście będzie
Pushkin - 10050
Dostoyevsky - 9999
Tolstoy - 23
Gogol - 23
metodami sortowania konkretne kolumny mogą być dostarczone po specyfikatorem kolumny. tj.
sort -k3rn
Należy pamiętać, że klucze można określić jako przęsła. W tym przypadku wartość parametru -k3
jest w porządku, ponieważ jest to ostatni zakres, ale w celu jawnego użycia tylko kolumny 3 (w przypadku dodania kolejnych kolumn), należy ją określić jako -k3,3
, Podobnie do sortowania według kolumny trzeciej w porządku malejącym, a następnie w kolumnie jeden w porządku rosnącym (co jest chyba to, co jest pożądane w tym przykładzie):
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
wyjście wola
Pushkin - 10050
Dostoyevsky - 9999
Gogol - 23
Tolstoy - 23
Bash 4.0 dodaje tablic asocjacyjnych, gdzie klucze mogą być ciągi. –
Cóż, będę ... masz rację. Po prostu potrzebuje 'declare -A autorzy'. –
Twoje rozwiązanie działa. O ile rozumiem, po prostu sortuje ciągi wyjściowe, a nie zawartość tablicy asocjacyjnej, ale w każdym razie, produkowany wynik jest tym, czego potrzebuję. – Graf