免费注册 查看新帖 |

Chinaunix

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

文件统计问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-25 08:34 |只看该作者 |倒序浏览
有一个文件,是按时间排列的,每秒钟可能有多条记录,记录中除了时间,还有调用函数的名称,我想取这个文件中时间在8:30~9:30间的行,并统计这段时间中每秒中各个函数出现的最大值,比如文件如下:
[2004-11-24 00:00:05,531] func1
[2004-11-24 00:00:05,531] func1
[2004-11-24 00:00:05,531] func1
[2004-11-24 00:00:05,531] func2
[2004-11-24 00:00:06,531] func2
[2004-11-24 00:00:05,531] func1
[2004-11-24 09:09:05,531] func1
[2004-11-24 09:09:05,531] func1
[2004-11-24 09:09:05,531] func1
[2004-11-24 09:09:05,531] func2
[2004-11-24 09:09:06,531] func2
[2004-11-24 09:09:06,531] func2
[2004-11-24 09:09:06,531] func2
[2004-11-24 09:09:07,531] func2
我希望得到的是 在8:30~9:30之间,func1在09:09:05出现的次数最多,次数为3,func2在09:09:06出现的次数最多,为2
怎样取出这样的值呢?请帮忙:)

论坛徽章:
0
2 [报告]
发表于 2004-11-25 12:58 |只看该作者

文件统计问题

第一步需要先把时间在8:30~9:30之间的记录选出来,该怎么做啊?

论坛徽章:
0
3 [报告]
发表于 2004-11-25 13:59 |只看该作者

文件统计问题

cat ${fileName}|while read line
do
flag=$(echo ${line:12:5}|tr -d ':'|awk '{if ($0>830&&$0<930) print "true" }')
if [ "${flag}" = "true" ]
then
echo $line
fi
done

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-11-25 14:11 |只看该作者

文件统计问题

[quote]原帖由 "sszerg"]第一步需要先把时间在8:30~9:30之间的记录选出来,该怎么做啊?[/quote 发表:

awk '/8:30/,/9:30/' file

论坛徽章:
0
5 [报告]
发表于 2004-11-25 14:22 |只看该作者

文件统计问题

原帖由 "寂寞烈火" 发表:

awk '/8:30/,/9:30/' file


是不是应该这样
awk '/8:30:/,/9:30:/' file  :wink:

论坛徽章:
0
6 [报告]
发表于 2004-11-25 14:46 |只看该作者

文件统计问题


  1. #! /bin/sh
  2. fileName=$1
  3. fuctionCountArry=""            #formatstring 'time:functionName:count'

  4. function IsContain ()
  5. {
  6. timeAndFuntionName=$1
  7. selectValue="$(echo ${fuctionCountArry[@]}|tr ' ' '\n'|nl|grep "${timeAndFuntionName}")"
  8. [ -z "${selectValue}" ]&&return 1
  9. selectValue=(${selectValue})
  10. return 0
  11. }

  12. function Count ()
  13. {
  14. TAName=$1
  15. IsContain ${TAName}
  16. if [ "$?" -eq "0" ]
  17. then
  18. i=${selectValue[0]}
  19. i=$((i-1))
  20. num=$(echo ${selectValue[1]}|awk -F: '{print $3}')
  21. num=$((num+1))
  22. fuctionCountArry[i]=$(echo ${selectValue[1]}|awk -F: '{print $1":"$2}'):${num}
  23. return 0
  24. else
  25. fuctionCountArry=(${fuctionCountArry[@]} "${TAName}:1")
  26. fi
  27. }

  28. while read line
  29. do
  30. flag=$(echo ${line:12:5}|tr -d ':'|awk '{if ($0>830&&$0<930) print "true" }')
  31. if [ "${flag}" = "true" ]
  32. then
  33. echo $line
  34. Count $(echo ${line}|tr '[],\-:' ' '|awk '{print $1$2$3$4$5$6":"$8}')
  35. fi
  36. done < ${fileName}
  37. echo ${fuctionCountArry[@]}|tr ' ' '\n'|tr ':' ' '
复制代码

$ ./deamon.sh document.txt
[2004-11-24 09:09:05,531] func1
[2004-11-24 09:09:05,531] func1
[2004-11-24 09:09:05,531] func1
[2004-11-24 09:09:05,531] func2
[2004-11-24 09:09:06,531] func2
[2004-11-24 09:09:06,531] func2
[2004-11-24 09:09:06,531] func2
[2004-11-24 09:09:07,531] func2
20041124090905 func1 3
20041124090905 func2 1
20041124090906 func2 3
20041124090907 func2 1

论坛徽章:
0
7 [报告]
发表于 2004-11-25 16:06 |只看该作者

文件统计问题

非常感谢各位!
我试试先

论坛徽章:
0
8 [报告]
发表于 2004-11-25 16:34 |只看该作者

文件统计问题

第一步测试成功了
还有个问题,如果正好文件中没有8点30分的情况该怎么办?这个文件是个日志文件,有可能8:30没有写记录。

论坛徽章:
0
9 [报告]
发表于 2004-11-25 16:46 |只看该作者

文件统计问题

为什么不试试我写的了?

论坛徽章:
0
10 [报告]
发表于 2004-11-25 16:53 |只看该作者

文件统计问题

awk '/8:30:/,/9:30:/' file 就是假设你的文件有包含8:30 和9:30的行,取出夹在中间的行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP