1. 程式人生 > >awk-處理檔案分組統計,分組求和、取最大最小值,取最大最小記錄

awk-處理檔案分組統計,分組求和、取最大最小值,取最大最小記錄

一、分組求和並排序1.存在檔案groupsum.txt原始資料如下,對下面的檔案根據第四列進行分組,並對1,2,3列進行求和。0.2  0.3  0.5    10.3  0.1   0.2   30.4  0.2   0.3   10.2  0.2   0.2    20.3  0.3   0.3    20.3   0.2   0.6   30.1   0.1   0.1   4原始資料如上統計為如下這個樣子:0.6 0.5 0.8 10.5 0.5 0.5 20.6 0.3 0.8 30.1 0.1 0.1 4實現邏輯:對每一列簡歷一個數據,陣列下標為第四列的值,當出現重複值時對其進行求和;處理完成之後再END中輸出。實現方法:awk '{a[$4]+=$1;b[$4]+=$2;c[$4]+=$3}END{for(i in a)print a[i],b[i],c[i],i}' groupsum.txt
對上述檔案,根據第四列進行分組,並對1,2,3列進行求和,並根據第四列進行倒敘排列。awk '{a[$4]+=$1;b[$4]+=$2;c[$4]+=$3}END{for(i in a)print a[i],b[i],c[i],i}' groupsum.txt |sort -k4nr對上述檔案,根據第四列進行分組,並對1,2,3列進行求和,並根據第一列進行倒敘,第二列正序輸出awk '{a[$4]+=$1;b[$4]+=$2;c[$4]+=$3}END{for(i in a)print a[i],b[i],c[i],i}' groupsum.txt |sort -k1nr -k2n二、有如下檔案,roleid,serverid分組,取出每個角色最後一次登入時的記錄
檔案last_login 中包含roleid    serverid    logintime    level四個欄位,檔案具體內容如下:1001    1    2018-01-01 21:00:02    101002    2    2008-01-02 22:01:02    111001    1    2018-01-01 20:58:01    91001    2    2018-01-01 21:01:02    12awk -F"\t" '{if($3>a[$1$2]) {a[$1$2]=$3;b[$1$2]=$0}}END{for(i in b) print b[i]}' last_login.txt三、分組統計還以last_login.txt 為例,以roleid和serverid分組,統計出現次數。
awk -F "\t" '{a[$1][$2]=a[$1][$2]+1}END{for (i in a) {for (j in a[i]) print i,j,a[i][j]}}' last_login.txt四、取最後一行還是以last_login.txt 為例,以roleid和serverid分組,查詢每個角色的最後一條記錄awk -F "\t" '{if (a[$1][$2] >$3 ||a[$1][$2]=="") a[$1][$2]=$0}END{for (i in a) {for (j in a[i]) print i,j,a[i][j]}}' last_login.txt