免费注册 查看新帖 |

Chinaunix

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

awk的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-03 15:58 |只看该作者 |倒序浏览
我在看nginx访问日志的时候发现格式为118.123.1.252 - - [03/Mar/2010:04:00:21 +0800] "GET /do_not_delete/noc.gif HTTP/1.1" 200 2419 "-" "-" -
现在,我想看时间是2010年3月3号的ip都有哪些,我应该怎么限定日期啊,就是03/Mar/2010:00:00:00 到03/Mar/2010:23:59:59,之间的ip

论坛徽章:
34
亥猪
日期:2015-03-20 13:55:11戌狗
日期:2015-03-20 13:57:01酉鸡
日期:2015-03-20 14:03:56未羊
日期:2015-03-20 14:18:30子鼠
日期:2015-03-20 14:20:14丑牛
日期:2015-03-20 14:20:31辰龙
日期:2015-03-20 14:35:34巳蛇
日期:2015-03-20 14:35:56操作系统版块每日发帖之星
日期:2015-11-06 06:20:00操作系统版块每日发帖之星
日期:2015-11-08 06:20:00操作系统版块每日发帖之星
日期:2015-11-19 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13
2 [报告]
发表于 2010-03-03 16:18 |只看该作者
grep “03/Mar/2010” ,然后 awk 第一段,sort uniq 汇总。

论坛徽章:
0
3 [报告]
发表于 2010-03-03 16:40 |只看该作者
用awk可以,但是没有下面的方法快,如果你有更快的方法,欢迎拍砖
  1. #!/bin/bash
  2. #
  3. # $Id: cutByStr.func,v 0.1 2010-02-18 13:51:37 zhzxy1/zh/ccb $
  4. #
  5. # 截取两个字符串之间的内容
  6. #
  7. # cut_by_str 文件名 [开始字符串] [结束字符串]
  8. #

  9. cut_by_str() {

  10. local INPUT=$1
  11. local START=$2
  12. local STOP=$3
  13. local bnu=
  14. local enu=


  15. if [ -n "$STOP" ]; then
  16.         bnu=`grep -n -m 1 "$START" $INPUT | awk -F: '{print $1}'`
  17.         enu=`grep -n -m 1 "$STOP"  $INPUT | awk -F: '{print $1}'`
  18.         tail -n +$bnu $INPUT | head -n $((enu-bnu))

  19. else
  20.         if [ -n "$START" ]; then
  21.                 bnu=`grep -n -m 1 "$START" $INPUT | awk -F: '{print $1}'`
  22.                 tail -n +$bnu $INPUT

  23.         else
  24.                 cat $INPUT
  25.         fi
  26. fi

  27. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-03-03 16:40 |只看该作者
我晕,这招太狠了,为什么我没想出来呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP