Awk 陣列排序多種實現方法

發表於2015-10-10

由於awk陣列,是關聯陣列。for…in迴圈輸出時候,預設列印出來是無序陣列。

如果需要按照順序輸出,通過鍵值定位方式輸出。

 

一、通過內建函式(asort,asorti使用) awk 3.1以上版本才支援

  1. asort使用說明

srcarrlen=asort[srcarr,dscarr] 預設返回值是:原陣列長度,傳入引數dscarr則將排序後陣列賦值給dscarr.

asort只對值進行了排序,因此丟掉原先鍵值。

 

2、asorti 使用說明

asorti對鍵值 進行排序(字串型別),將生成新的陣列放入:tA中。

 

二、通過管道傳送到sort排序

通過管道,傳送到外部程式“sort”排序,-r 從大到小,-n 按照數字排序,-k2 以第2列排序。通過將資料丟給第3方的sort命令,所有問題變得非常簡單。如果以key值排序 –k2 變成 -k1即可。

 

三、自定義排序函式

  • awk自定義函式結構:

以上是:awk自定義函式表示方式,預設傳入引數都是以引用方式傳入,return值,只能是字元型或者數值型。 不能返回陣列型別。 如果返回陣列型別。需要通過形參 方式傳入。再獲得。

awk返回陣列型別

  • 排序函式

#arr 傳入一維陣列

#key 排序型別 1是按照值排序 2按照鍵值

#datatype 比較型別 1按照數字排序 2按照字串排序

#tarr 排序返回的陣列

#splitseq 分割字串 陣列中鍵與值之間分割字串

#return 陣列長度

#實現思路,將原始陣列a[‘a’]=100 排序後變成 a[1]=a分隔符100 ,然後按照下標遞迴顯示內容。 本排序使用冒泡方式進行。

完整程式碼如下:

以上是awk陣列排序一些方法。對於少量資料排序,就效能而言,使用自定義函式效能要高,不需要另外再開啟程式。對於大量資料,排序第2種方法還是很不錯的。

相關文章