利用awk命令进行统计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用awk命令进行统计相关的知识,希望对你有一定的参考价值。

现在有一个文件,文件里有N行,认为每行是一条记录的话,每条记录里都会有个关键字keywords=,我想取出keywords后的value(长字符串),这些value以&结束。
最后统计各value出现的次数。
请问这个怎么弄啊??用awk
如:

http://r.union.meituan.com/cps/bdt?url=http://bj.meituan.com/deal/9577241.html&tn=baidutuan_tg&baiduid=4acfbbf10ce8b20c63431ef54144209e
我想对关键字
url取值http://bj.meituan.com/deal/9577241.html
tn取值baidutuan_tg
baiduid取值4acfbbf10ce8b20c63431ef54144209e
然后放在同一个文件,成下列效果。
http://bj.meituan.com/deal/9577241.html  baidutuan_tg  4acfbbf10ce8b20c63431ef54144209e

多谢关注

怪我没说清楚,比如现在有两条记录
http://r.union.meituan.com/cps/bdt?url=http://bj.meituan.com/deal/9577241.html&tn=baidutuan_tg&baiduid=4acfbbf10ce8b20c63431ef54144209e
http://r.union.meituan.com/cps/bdt?url=http://bj.meituan.com/deal/9577241.html&ignore=woshihanzi&tn=baidutuan_tg&baiduid=4acfbbf10ce8b20c63431ef54144209e
又怎么样处理?我想问的是怎么匹配到给定字符串key后的值value,并且已知其格式为key=value&

没注意你baidutuan_tg 和url是一行,把第一个\\n 换成逗号,就行了。


awk -F\'[=|&]\' \'print $2"\\n"$4"\\n"$6\' file

追问

字符太多这里贴不上,请看问题补充。

追答


sed \'s/.*url=\\(.*\\)&.*tn=\\(.*\\)&.*baiduid=\\(.*\\)/\\1\\ \\2\\n\\3/\' file

是这样吗?

参考技术A 把你的实际文本贴出来看看
[csy@db1 ~]$ cat 1.txt | awk -F"=" 'print $2,$3,$4'| sed 's/&tn//g' | sed 's/&baiduid//'
http://bj.meituan.com/deal/9577241.htmlbaidutuan_tg 4acfbbf10ce8b20c63431ef54144209e

[csy@db1 ~]$ sed 's/&[a-z]*=/=/g' 1.txt| awk -F"=" 'print $2,$3,$4,$5'
http://bj.meituan.com/deal/9577241.htmlbaidutuan_tg 4acfbbf10ce8b20c63431ef54144209e
http://bj.meituan.com/deal/9577241.htmlwoshihanzi baidutuan_tg 4acfbbf10ce8b20c63431ef54144209e
需要提前知道每行中key的最大个数

awk命令统计某程序的CPU总的利用率

有时候我们需要统计系统中某一个程序的CPU利用率来做监控,而这个程序可能有多个进程或者多个线程,我们可以先匹配到该程序的所有进程或者线程,然后计算所有线程或者进程的CPU利用率的和,从而算出该程序的CPU总的利用率。

下面我们以nginx程序为例。

[email protected]:# ps aux | grep nginx |grep -v grep |awk ‘{sum+=$3;}END{print sum}‘
0

如果要统计mysql所有进程的CPU利用率,则将nginx换成mysql即可。

上面的命令用到了awk编程。

awk ‘{sum+=$3;}END{print sum}‘

这里是自定义一个变量sum,并且使sum=$sum+$3。最后计算sum的结果。



上面的命令使用grep来匹配nginx关键字,其实也可以直接使用awk的PATTERN用法来匹配。

语法为:awk [option] ‘/PATTERN/ {ACTION}‘  /path/to/file

[email protected]:~/shell_test# ps aux  |awk ‘/nginx/ {sum+=$3;}END{print sum}‘      
0

但是这个命令有一点问题,就是awk这条命令本身也会被模式匹配到。看下面的命令:

[email protected]:~# ps aux  |awk ‘/nginx/ {print }‘      
root      4969  0.0  0.0  65248  1372 ?        Ss   May26   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx     4970  0.0  0.1  65788  2192 ?        S    May26   0:00 nginx: worker process                   
nginx     4971  0.0  0.1  65788  1940 ?        S    May26   0:06 nginx: worker process                   
nginx     4972  0.0  0.1  65788  1940 ?        S    May26   0:06 nginx: worker process                   
nginx     4973  0.0  0.1  65788  1940 ?        S    May26   0:06 nginx: worker process                   
nginx     4974  0.0  0.0  65472  1740 ?        S    May26   0:00 nginx: cache manager process            
root     18698  0.0  0.0 105948  1064 pts/0    R+   17:15   0:00 awk /nginx/ {print }

最后一条是awk命令本身,这里我不清楚如何像grep -v grep一样去掉awk命令自身。




本文出自 “zengestudy” 博客,转载请与作者联系!

以上是关于利用awk命令进行统计的主要内容,如果未能解决你的问题,请参考以下文章

awk----利用循环统计个数

shell练习--awk统计ip访问量(一条命令)

awk常用的几个统计命令

Linux awk 命令详解(二) if 分支 数组

统计文件里面某个字符串出现次数

比较awk python: [文件]web日志信息统计 。 [命令]netstat命令状态统计