整理:AWK的初級運用之分組計算功能
分組一般都是用x[$2]=x[$3]....的方式來實現的,其中x[$2]中的$2為要分的組,當然可以多個分組,x[$3]為要處理的值
[root@localhost wms]# cat groupandsum.txt
John|P|physics|2|02/12/2002
Rick|L|Mechanical|1|02/12/2002
Jack|T|electrical|3|03/12/2003
Phil|R|Electrucal|1|03/12/2003
Mike|T|mechamical|2|10/12/2003
Paul|R|chemical|2|10/12/2003
John|T|chemical|3|10/12/2002
Tony|N|chemical|2|10/11/2003
James|R|Electrucal|2|10/11/2003
分組求和:
一般求和:
awk -F '|' '{sum1 += $4} END {print sum1}' groupandsum.txt
分組求和:
一次分組:
[root@localhost wms]# awk -F "|" '{x[$5]+=$4} END{for( i in x ){print i,x[i]}}' groupandsum.txt
03/12/2003 4
02/12/2002 3
10/12/2002 3
10/12/2003 4
10/11/2003 4
二次分組:
[root@localhost wms]# awk -F "|" '{x[$5"-"$3]+=$4} END{for( i in x ){print i,x[i]}}' groupandsum.txt
10/12/2002-chemical 3
03/12/2003-Electrucal 1
03/12/2003-electrical 3
02/12/2002-Mechanical 1
10/12/2003-mechamical 2
02/12/2002-physics 2
10/11/2003-Electrucal 2
10/11/2003-chemical 2
10/12/2003-chemical 2
[root@localhost wms]#
格式化處理:
awk -F'|' '{a[$5]+=$4}END{for(i in a)printf("%s\t%d\n",i,a[i])}' groupandsum.txt
分組求平均值:
一般情況下求平均:
[root@localhost wms]# awk -F'|' '{sum+=$4} END {print "Average = ", sum/NR}' groupandsum.txt
Average = 2
分組求平均:
[root@localhost wms]# awk -F'|' '{a[$5]+=$4;ca[$5]++}END{for(i in a)printf("%s\t%d\taverage:%d\n",i,a[i],a[i]/ca[i])}' groupandsum.txt
03/12/2003 4 average:2
02/12/2002 3 average:1
10/12/2002 3 average:3
10/12/2003 4 average:2
10/11/2003 4 average:2
注意了,/ 求是整數,% 求餘數
/ 也能求得完整的值,只是沒有顯示而已,用%.2f就可以顯示了
[root@localhost wms]# awk -F'|' '{a[$5]+=$4;ca[$5]++}END{for(i in a)printf("%s\t%d\t%.2f\n",i,a[i],a[i]/ca[i])}' groupandsum.txt
03/12/2003 4 2.00
02/12/2002 3 1.50
10/12/2002 3 3.00
10/12/2003 4 2.00
10/11/2003 4 2.00
分組求最大最小
一般情況下求最大最小:
[root@localhost wms]# awk -F'|' 'BEGIN {max=0}{if($4>max){max=$4}} END{print max}' groupandsum.txt
3
分組情況求最大最小:
[root@localhost wms]# awk -F'|' '{if($4>x[$5]){x[$5]=$4}} END{for (i in x) print i,x[i] }' groupandsum.txt
03/12/2003 3
02/12/2002 2
10/12/2002 3
10/12/2003 2
10/11/2003 2
分組整理字元:
a 111
a 222
a 333
b 444
d 555
>awk '{x[$1]=x[$1]"\n"$2} END{for( i in x ){print i":", x[i]}}' juhe.txt
a:
111
222
333
b:
444
555
ORACLE開發優化群:134426686 歡迎加入
[root@localhost wms]# cat groupandsum.txt
John|P|physics|2|02/12/2002
Rick|L|Mechanical|1|02/12/2002
Jack|T|electrical|3|03/12/2003
Phil|R|Electrucal|1|03/12/2003
Mike|T|mechamical|2|10/12/2003
Paul|R|chemical|2|10/12/2003
John|T|chemical|3|10/12/2002
Tony|N|chemical|2|10/11/2003
James|R|Electrucal|2|10/11/2003
分組求和:
一般求和:
awk -F '|' '{sum1 += $4} END {print sum1}' groupandsum.txt
分組求和:
一次分組:
[root@localhost wms]# awk -F "|" '{x[$5]+=$4} END{for( i in x ){print i,x[i]}}' groupandsum.txt
03/12/2003 4
02/12/2002 3
10/12/2002 3
10/12/2003 4
10/11/2003 4
二次分組:
[root@localhost wms]# awk -F "|" '{x[$5"-"$3]+=$4} END{for( i in x ){print i,x[i]}}' groupandsum.txt
10/12/2002-chemical 3
03/12/2003-Electrucal 1
03/12/2003-electrical 3
02/12/2002-Mechanical 1
10/12/2003-mechamical 2
02/12/2002-physics 2
10/11/2003-Electrucal 2
10/11/2003-chemical 2
10/12/2003-chemical 2
[root@localhost wms]#
格式化處理:
awk -F'|' '{a[$5]+=$4}END{for(i in a)printf("%s\t%d\n",i,a[i])}' groupandsum.txt
分組求平均值:
一般情況下求平均:
[root@localhost wms]# awk -F'|' '{sum+=$4} END {print "Average = ", sum/NR}' groupandsum.txt
Average = 2
分組求平均:
[root@localhost wms]# awk -F'|' '{a[$5]+=$4;ca[$5]++}END{for(i in a)printf("%s\t%d\taverage:%d\n",i,a[i],a[i]/ca[i])}' groupandsum.txt
03/12/2003 4 average:2
02/12/2002 3 average:1
10/12/2002 3 average:3
10/12/2003 4 average:2
10/11/2003 4 average:2
注意了,/ 求是整數,% 求餘數
/ 也能求得完整的值,只是沒有顯示而已,用%.2f就可以顯示了
[root@localhost wms]# awk -F'|' '{a[$5]+=$4;ca[$5]++}END{for(i in a)printf("%s\t%d\t%.2f\n",i,a[i],a[i]/ca[i])}' groupandsum.txt
03/12/2003 4 2.00
02/12/2002 3 1.50
10/12/2002 3 3.00
10/12/2003 4 2.00
10/11/2003 4 2.00
分組求最大最小
一般情況下求最大最小:
[root@localhost wms]# awk -F'|' 'BEGIN {max=0}{if($4>max){max=$4}} END{print max}' groupandsum.txt
3
分組情況求最大最小:
[root@localhost wms]# awk -F'|' '{if($4>x[$5]){x[$5]=$4}} END{for (i in x) print i,x[i] }' groupandsum.txt
03/12/2003 3
02/12/2002 2
10/12/2002 3
10/12/2003 2
10/11/2003 2
分組整理字元:
a 111
a 222
a 333
b 444
d 555
>awk '{x[$1]=x[$1]"\n"$2} END{for( i in x ){print i":", x[i]}}' juhe.txt
a:
111
222
333
b:
444
555
ORACLE開發優化群:134426686 歡迎加入
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25960404/viewspace-1818866/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【計算機組成原理】第6章 計算機的運算方法計算機
- 彙編初識與計算機組成計算機
- Awk常用用法整理
- 泛型的初運用泛型
- 1+x雲端計算平臺運維開發初級實操題集合運維
- SAP PM 初級系列2 – 定義計劃員組
- JavaScript運算元組JavaScript
- 計組之資料運算:9、浮點數的表示
- Linq之分組聯接
- 通天之分組揹包
- 位運算的應用
- 運籌優化(十五)--應用模型之分配問題優化模型
- 計算機組成原理縮寫以及概念整理(持續更新)計算機
- PowerBI_一分鐘瞭解POWERBI計算組_基礎運用篇(一)
- 位運算子的計算
- 簡單混合運算的計算器
- 雲端計算基礎學習,雲端計算的八大運用分析
- python算術運算子的擴充套件功能Python套件
- 計算機系統基本組成和基本功能計算機
- 計算機各部件的功能計算機
- SAP PM 初級系列26 - 裝置&功能位置的Document
- 為什麼計算機採用補碼進行運算?計算機
- 【Shell】sed xargs grep awk的組合用法
- 四則運算計算器
- 計算機網路考點整理計算機網路
- 計算機組成原理 - 計算篇計算機
- 雲端計算日常運用場景介紹!
- Python 實現郵件傳送功能(初級)Python
- 談談位運算和在Android中的運用Android
- samber/lo 提供了豐富的函式用於運算元組和切片函式
- Linux awk 中 xxxx的應用Linux
- js運算元組中資料排列組合JS
- 雲端計算替代傳統 IT,承載奧運的組織、運營和賽事轉播。
- SAP PM 初級系列9 - 定義功能位置的安裝
- 雲運維-初級1段-Tomcat搭建配置運維Tomcat
- WinRAR初級中級高階等應用
- js 方法(運算元組為主JS
- 雲端計算中容器的功能
- P1757 通天之分組揹包