2008-09-20 50 views
2

是否有一種簡單的方法可以在awk中執行以下任何操作?在awk中對哈希/數組進行排序

  • 通過它的數據
  • 排序數組/哈希排序的哈希通過這串鑰匙
+0

這裏是一個天然的awk快速排序的例子: http://en.literateprograms.org/Quicksort_(AWK) 對不起,這個網站似乎沒有任何通知或我會得到這個更早。我希望你看到它。 – Chris 2008-09-23 20:22:10

+0

http://www.netlib.org/research/awkbookcode/ch7 這是一個鏈接到awk中的插入排序(以及更多)。 – Chris 2008-09-23 20:30:54

回答

3

這裏的別人的答案,一個非常類似的問題: http://www.computing.net/answers/unix/urgent-help-with-sorting-in-awk/4442.html

這應該是像這樣:

gawk 'BEGIN {c=1} { array[c] = sprintf ("%s %s", $2, $1); c++ } 
END { asort(array); for (x=1;x<c;x++) { print array[x] } }' 

請注意,我使用了'gawk'。如果你想內置排序,使用gawk。

該示例以鍵值對的「空格分隔」輸入爲基礎,並根據第二個值對它們進行排序(當然,它會以值/鍵格式打印出來,但您會看到我在那裏做了什麼)。

爲了做到gawk中存在的數組,你可以使用類似的東西。

如果使用awk或mawk,則必須使用手冊頁中提供的許多排序函數之一來完成排序。

從gawk手冊頁: AWK中的所有數組都是關聯的,即通過字符串值進行索引。 可以在if或while語句中使用特殊運算符來查看數組是否具有包含 特定值的索引。 if(val in array) print array [val] 如果數組有多個下標,請在數組中使用(i,j)。