免费注册 查看新帖 |

Chinaunix

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

[文本处理] 一个循环的问题 [复制链接]

论坛徽章:
1
摩羯座
日期:2014-12-22 14:37:25
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-15 10:35 |只看该作者 |倒序浏览
本帖最后由 davie5201314 于 2014-10-15 11:06 编辑

access.log
  1. 218.66.244.42 - - [14/Oct/2014:23:59:59 +0800] "GET /cgi/app.ums?&c=65604476&z=16&userid=936370&session=1314341282&version=1 HTTP/1.0" 200 64 "-" "Mozilla/5.0"
  2. 49.94.128.254 - - [14/Oct/2014:23:59:59 +0800] "GET /cgi/img.ums?&c=67839341&z=16&userid=936370&session=1314341282&version=1 HTTP/1.0" 200 64 "-" "Mozilla/5.0"
复制代码
  1. DATE=`date -d '-1 day' +%Y%m%d`
  2.         for i in {00..23}
  3.         do
  4.         HOUR_COUNT=`cat /data/httplogs/access.$DATE|awk -F: '$2=='$i' {print $4}'|awk -F'[ ?]' '{print $4}'|sort|uniq -c|sort -nr`
  5.         echo  "$HOUR_COUNT" >>hour_count.txt
  6.         sed -i 's/^/'$DATE'-'$i'\t/g' hour_count.txt
  7.         done
  8.         echo  "$HOUR_COUNT" >>hour_count.txt
  9.         sed -i 's/^/'$DATE'-'$i'\t/g' hour_count.txt
  10.         done
复制代码
我的本意是把提取的access日志中每小时的访问排行,打一个时间戳,没没想到出现下面的结果
  1. 20141014-02        20141014-01        20141014-00         307756 /cgi/music.ums
  2. 20141014-02        20141014-01        20141014-00          60866 /cgi/app.ums
  3. 20141014-02        20141014-01        20141014-00          28642 /cgi/andriod.ums
  4. 20141014-02        20141014-01        20141014-00          11859 /cgi/img.ums
  5. 20141014-02        20141014-01        20141014-00           3017 /cgi/map.ums
  6. 20141014-02        20141014-01        20141014-00           1954 /cgi/route.ums
  7. 20141014-02        20141014-01        20141014-00           1566 /cgi/search.ums
  8. 20141014-02        20141014-01        20141014-00           1347 /cgi/version.ums
  9. 20141014-02        20141014-01        20141014-00           1055 /cgi/jvs.ums
  10. 20141014-02        20141014-01        20141014-00            227 /cgi/info.ums
  11. 20141014-02        20141014-01        20141014-00            164 /cgi/3d.ums
  12. 20141014-02        20141014-01        20141014-00             21 /cgi/test.ums
  13. 20141014-02        20141014-01        20141014-00             11 /cgi/get.ums
  14. 20141014-02        20141014-01         278089 /cgi/music.ums
  15. 20141014-02        20141014-01          41421 /cgi/app.ums
  16. 20141014-02        20141014-01          18101 /cgi/andriod.ums
  17. 20141014-02        20141014-01           6046 /cgi/img.ums
  18. 20141014-02        20141014-01           1693 /cgi/map.ums
  19. 20141014-02        20141014-01           1303 /cgi/route.ums
  20. 20141014-02        20141014-01            894 /cgi/search.ums
  21. 20141014-02        20141014-01            803 /cgi/version.ums
  22. 20141014-02        20141014-01            666 /cgi/jvs.ums
  23. 20141014-02        20141014-01            150 /cgi/info.ums
  24. 20141014-02        20141014-01            112 /cgi/3d.ums
  25. 20141014-02        20141014-01             15 /cgi/test.ums
  26. 20141014-02        20141014-01              6 /cgi/get.ums
  27. 20141014-02         234877 /cgi/music.ums
  28. 20141014-02          32689 /cgi/app.ums
  29. 20141014-02          13263 /cgi/andriod.ums
  30. 20141014-02           3974 /cgi/img.ums
  31. 20141014-02           1165 /cgi/map.ums
  32. 20141014-02            990 /cgi/route.ums
  33. 20141014-02            567 /cgi/search.ums
  34. 20141014-02            453 /cgi/version.ums
  35. 20141014-02            440 /cgi/jvs.ums
  36. 20141014-02             94 /cgi/info.ums
  37. 20141014-02             70 /cgi/3d.ums
  38. 20141014-02             11 /cgi/test.ums
  39. 20141014-02              7 /cgi/get.ums
复制代码
结果变成,这小时生成的都把上一个小时生成的也打了时间戳,求解决思路,谢谢!

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
2 [报告]
发表于 2014-10-15 10:38 |只看该作者
给出原文本和目标文本吧,骚年~{:3_193:}

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
3 [报告]
发表于 2014-10-15 10:38 |只看该作者
回复 1# davie5201314


给原始文本,给想要的结果,不要贴你的代码。

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
4 [报告]
发表于 2014-10-15 10:41 |只看该作者
回复 1# davie5201314


    看的晕头转向。。。
请按下面格式给:
1、原始文本样例
2、期望输出
3、处理规则

论坛徽章:
1
摩羯座
日期:2014-12-22 14:37:25
5 [报告]
发表于 2014-10-15 11:15 |只看该作者
@bulletmarquis@ly5066113@ly5066113
1、原始的样例已经加上去了,跟大家的access日志基本相同
2、目的:用for循环将每小时请求的url进行计数统计,排行,然后输出重定向到hour_count.txt(已经实现);现在需要将每小时生成的排行前面打印时间戳(假如我统计的是15点,就打印20141014-15)

3、问题来了,因为我用的for循环,并且用的>>,16点循环出来的时间戳,就自动把15点的前面也添加了

要求是
  1. 20141014-02         234877 /cgi/music.ums
  2. 20141014-02          32689 /cgi/app.ums
  3. 20141014-02          13263 /cgi/andriod.ums
  4. 20141014-02           3974 /cgi/img.ums
  5. 20141014-02           1165 /cgi/map.ums
  6. 20141014-02            990 /cgi/route.ums
  7. 20141014-02            567 /cgi/search.ums
  8. 20141014-02            453 /cgi/version.ums
  9. 20141014-02            440 /cgi/jvs.ums
  10. 20141014-02             94 /cgi/info.ums
  11. 20141014-02             70 /cgi/3d.ums
  12. 20141014-02             11 /cgi/test.ums
  13. 20141014-02              7 /cgi/get.ums
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
6 [报告]
发表于 2014-10-15 11:25 |只看该作者
回复 5# davie5201314

问题来了,下一句应该是~{:3_193:}
   

论坛徽章:
1
摩羯座
日期:2014-12-22 14:37:25
7 [报告]
发表于 2014-10-15 11:30 |只看该作者
回复 6# yestreenstars

简单点吧,前面当我没说
我每小时生成一个这样的数据,放到abc.txt中
234877 /cgi/music.ums
32689 /cgi/app.ums
13263 /cgi/andriod.ums
3974 /cgi/img.ums
1165 /cgi/map.ums
990 /cgi/route.ums
567 /cgi/search.ums
453 /cgi/version.ums
440 /cgi/jvs.ums
94 /cgi/info.ums
70 /cgi/3d.ums
11 /cgi/test.ums
7 /cgi/get.ums
然后需要在前面每一行打印时间戳,这是0点的,下一小时是1点,然后2点...23点
    怎么做

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
8 [报告]
发表于 2014-10-15 11:38 |只看该作者
回复 5# davie5201314


时间本来就在日志中,还在外面打什么?
  1. DATE=`date -d '-1 day' +%Y%m%d`
  2. awk -F '[:"?]' -v d=$DATE '{a[d"-"$2" "gensub(/.* /,"",1,$5)]++}END{for(i in a)print i,a[i]}' /data/httplogs/access.$DATE | sort -k1,1 -k3,3nr > hour_count.txt
复制代码

论坛徽章:
1
摩羯座
日期:2014-12-22 14:37:25
9 [报告]
发表于 2014-10-15 11:51 |只看该作者
好吧,多谢各位,搞定收工!哎,求人不如求己啊!多想想还是能搞定的!

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
10 [报告]
发表于 2014-10-15 14:06 |只看该作者
回复 7# davie5201314
  1. awk -vt=`date +"%Y%m%d-%H"` '$1=t" "$1' abc.txt
  2. 20141015-13 234877 /cgi/music.ums
  3. 20141015-13 32689 /cgi/app.ums
  4. 20141015-13 13263 /cgi/andriod.ums
  5. 20141015-13 3974 /cgi/img.ums
  6. 20141015-13 1165 /cgi/map.ums
  7. 20141015-13 990 /cgi/route.ums
  8. 20141015-13 567 /cgi/search.ums
  9. 20141015-13 453 /cgi/version.ums
  10. 20141015-13 440 /cgi/jvs.ums
  11. 20141015-13 94 /cgi/info.ums
  12. 20141015-13 70 /cgi/3d.ums
  13. 20141015-13 11 /cgi/test.ums
  14. 20141015-13 7 /cgi/get.ums
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP