经常会有统计日志的功能,故收集了一些shell脚本,方便以后常用
例如以下需求:
1:统计排名
数据内容为
a 12 b 13 b 14 b 15 b 67 a 23 d 44 a 56
要求得到:
b 4 a 3 d 1
java里的方法是使用hashMap,shell里当然也一样了。
awk '{a[$1]++}END{for(i in a){print i,a[i] | "sort -r -k 2"}}' file
还有另外一种方法是使用cut
cut -c1 file | sort | uniq -c | sort -r | awk '{print $2,$1}'
2 某列求和
例如数据内容为:
1 2 3 4
希望得到 1 +2 +3 +4 的结果
shell脚本为
awk '{a = a + $1} END {print a} ' file
3 统计某一类的总和数(就是多了个if的判断)
awk '{ if($1==2) a = a + $1} END {print a} ' file
4 提取 AAA=BBB,CCC=DDD为BBB:DDD
awk '/add success/{ print $7$8}' DBReaderLog0.log | sed -r 's/userId=(.*?)cartId=(.*?)$/\1:\2/' fgrep 'add success' DBReaderLog0.log | awk -F '=' '{print $2,$3}' | awk '{print $1":"$3}' awk -F '=' '/add success/{print $2,$3}' DBReaderLog0.log | awk '{print $1":"$3}' awk '/add success/ { print gensub("userId=(.*)","\\1","g",$7) ":" gensub("cartId=(.*)","\\1","g",$8)}' DBReaderLog0.log awk '/add success/ { print substr($7,8)":"substr($8,8)}' DBReaderLog0.log