免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2274 | 回复: 7
打印 上一主题 下一主题

[文本处理] 如何统计文本中字符串出现的数量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-03 10:20 |只看该作者 |倒序浏览
一台服务器,一直报打开文件数过多。
想写个脚本用lsof命令查找是那个用户哪个进程打开的文件数最多。
比如lsof出现的信息如下
COMMAND     PID      USER   FD      TYPE             DEVICE     SIZE       NODE NAME
init          1      root  cwd       DIR                8,2     4096          2 /
init          1      root  rtd       DIR                8,2     4096          2 /
init          1      root  txt       REG                8,2    43496     415811 /sbin/init
init          1      root  mem       REG                8,2   139416     575728 /lib64/ld-2.5.so
init          1      root  mem       REG                8,2  1717800     575729 /lib64/libc-2.5.so
init          1      root  mem       REG                8,2    23360     575731 /lib64/libdl-2.5.so
init          1      root  mem       REG                8,2   247496     575745 /lib64/libsepol.so.1
init          1      root  mem       REG                8,2    95464     575746 /lib64/libselinux.so.1
init          1      root   10u     FIFO               0,17                2769 /dev/initctl
migration     2      root  cwd       DIR                8,2     4096          2 /
migration     2      root  rtd       DIR                8,2     4096          2 /
migration     2      root  txt   unknown                                        /proc/2/exe
ksoftirqd     3      root  cwd       DIR                8,2     4096          2 /
ksoftirqd     3      root  rtd       DIR                8,2     4096          2 /
ksoftirqd     3      root  txt   unknown                                        /proc/3/exe
migration     4      root  cwd       DIR                8,2     4096          2 /
migration     4      root  rtd       DIR                8,2     4096          2 /
migration     4      root  txt   unknown                                        /proc/4/exe
ksoftirqd     5      root  cwd       DIR                8,2     4096          2 /
ksoftirqd     5      root  rtd       DIR                8,2     4096          2 /
ksoftirqd     5      root  txt   unknown                                        /proc/5/exe
events/0      6      root  cwd       DIR                8,2     4096          2 /
events/0      6      root  rtd       DIR                8,2     4096          2 /
events/0      6      root  txt   unknown                                        /proc/6/exe
events/1      7      root  cwd       DIR                8,2     4096          2 /
events/1      7      root  rtd       DIR                8,2     4096          2 /

那有什么方法可以自动计算每个进程打开了多少文件,并根据打开文件的数量自动排序?

论坛徽章:
0
2 [报告]
发表于 2015-07-03 10:32 |只看该作者
自己能想得到的是用 lsof |awk '{print $2}'|uniq -c|sort -g

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
3 [报告]
发表于 2015-07-03 11:16 |只看该作者
  1. awk '{a[$2]++}END{for(i in a)print i,a[i]|"sort -n"}'
复制代码

论坛徽章:
11
射手座
日期:2015-08-11 16:10:26辰龙
日期:2015-08-11 16:11:11黑曼巴
日期:2016-04-26 16:58:40
4 [报告]
发表于 2015-07-03 11:38 |只看该作者
统计进程:
  1. awk 'NR>1{a[$1]++}END{for(i in a)print i,a[i]}' file | sort -n -k2,2
复制代码
统计用户:
  1. awk 'NR>1{a[$3]++}END{for(i in a)print i,a[i]}' file | sort -n -k2,2
复制代码

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
5 [报告]
发表于 2015-07-03 13:28 |只看该作者
本帖最后由 haooooaaa 于 2015-07-03 13:58 编辑

回复 1# 338378WN8
  1. [root@cAdmin 456]# lsof | awk 'function f(d){for(i in d){printf "%-18s %-10s\n",i,d[i] | "sort -k2nr"};close("sort -k2nr");print "=================="}NR>1&&$5!~/unknown/{p[$1]++;u[$3]++}END{f(u);f(p)}'
  2. root               729      
  3. postfix            92        
  4. haldaemon          53        
  5. dbus               25        
  6. rpc                24        
  7. rpcuser            24        
  8. ==================
  9. master             126      
  10. sshd               96        
  11. cupsd              57        
  12. mingetty           48        
  13. pickup             46        
  14. qmgr               46        
  15. udevd              46        
  16. hald               37        
  17. automount          36        
  18. hald-addo          35        
  19. lsof               26        
  20. dbus-daem          25        
  21. rpcbind            24  
复制代码

论坛徽章:
0
6 [报告]
发表于 2015-07-03 14:17 |只看该作者
回复 4# hjfeng1988

嗯,这个好像可以的


   

论坛徽章:
0
7 [报告]
发表于 2015-07-03 14:18 |只看该作者
回复 5# haooooaaa
高手啊,sed我还看得懂,awk基本就抓瞎了。


   

论坛徽章:
771
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
8 [报告]
发表于 2015-07-03 15:55 |只看该作者
回复 7# 338378WN8


    理论上来说, awk比较好懂吧,比较接近高级语言的语法.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP