Mở rộng câu trả lời từ @AndrewSchulman, sử dụng -rn như một tùy chọn sắp xếp toàn cầu đảo ngược tất cả các cột. Trong ví dụ này, các tác giả có cùng giá trị mảng kết hợp sẽ được xuất theo thứ tự ngược lại của tên.
Ví dụ
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
chí đầu ra
Pushkin - 10050
Dostoyevsky - 9999
Tolstoy - 23
Gogol - 23
Tùy chọn để phân loại các cột cụ thể có thể được cung cấp sau khi specifier cột. tức là
sort -k3rn
Lưu ý rằng các phím có thể được chỉ định là nhịp. Ở đây -k3
xảy ra là tốt bởi vì nó là nhịp cuối cùng, nhưng chỉ sử dụng cột 3 (trong trường hợp thêm cột), nó phải được chỉ định là -k3,3
, Tương tự như sắp xếp theo cột ba theo thứ tự giảm dần, và sau đó cột một thứ tự tăng dần (mà có lẽ là những gì được mong muốn trong ví dụ này):
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
chí đầu ra
Pushkin - 10050
Dostoyevsky - 9999
Gogol - 23
Tolstoy - 23
Bash 4.0 bổ sung thêm mảng kết hợp phím có thể là chuỗi. –
Tôi sẽ ... bạn nói đúng. Nó chỉ cần 'khai báo -A tác giả'. –
Giải pháp của bạn hoạt động. Theo như tôi hiểu, nó chỉ sắp xếp các chuỗi đầu ra, không phải nội dung của mảng kết hợp, nhưng dù sao, đầu ra được tạo ra là những gì tôi cần. – Graf