当前位置:  技术问答>linux和unix

用grep、awk / cut 完成文本统计,请教高手!

    来源: 互联网  发布时间:2016-03-25

    本文导语:  有一道试题,针对一个日志文件 test.log, 内容格式形如: 203.110.136.5 - - [01/Aug/2004:00:08:40 +1000] "GET /~jc123663/MyBikeS.jpg HTTP/1.1" 304 - 66.196.90.59 - - [01/Aug/2004:00:54:45 +1000] "GET /robots.txt HTTP/1.0" 404 282 66.196.90.105 - ...

有一道试题,针对一个日志文件 test.log, 内容格式形如:
203.110.136.5 - - [01/Aug/2004:00:08:40 +1000] "GET /~jc123663/MyBikeS.jpg HTTP/1.1" 304 -
66.196.90.59 - - [01/Aug/2004:00:54:45 +1000] "GET /robots.txt HTTP/1.0" 404 282
66.196.90.105 - - [01/Aug/2004:00:54:47 +1000] "GET /~cp2010/Old/jc131568 HTTP/1.0" 301 332
.....
要求: 写一个简单的脚本a.sh, 对文件中每一行出现的日期进行统计,参数1为年,参数2为月,命令如 ./a.sh 2004 Aug ,统计文件中包含 “Aug/2004"的行的数量。
(1) 主要使用 cut 命令实现。
(2) 主要使用 grep 或awk 命令实现

因对命令不熟,请Linux大侠帮忙!
在线散分!!!多谢~

|
if [ $# -eq 0 ]
then
echo -e "usage: ./test.sh 2008 Febn./test.sh 2008"
exit -1
fi
count=0
mon[1]=0
mon[2]=0
mon[3]=0
mon[4]=0
mon[5]=0
mon[6]=0
mon[7]=0
mon[8]=0
mon[9]=0
mon[10]=0
mon[11]=0
mon[12]=0
while read line
do
month=`echo $line|cut -d'/' -f 2`
year=`echo $line|cut -d'/' -f 3 |cut -d':' -f 1`
#echo $year $month
if [ $# -eq 2 ]
then
        if [ $1 = $year -a $2 = $month ]
        then
                count=`expr $count + 1`
        fi
elif [ $# -eq 1 ]
then
        if [ $1 = $year ]
        then
                case "$month"
                in
                Jan)mon[1]=`expr ${mon[1]} + 1`;;
                Feb)mon[2]=`expr ${mon[2]} + 1`;;
                Mar)mon[3]=`expr ${mon[3]} + 1`;;
                Apr)mon[4]=`expr ${mon[4]} + 1`;;
                May)mon[5]=`expr ${mon[5]} + 1`;;
                Jun)mon[6]=`expr ${mon[6]} + 1`;;
                Jul)mon[7]=`expr ${mon[7]} + 1`;;
                Aug)mon[8]=`expr ${mon[8]} + 1`;;
                Sep)mon[9]=`expr ${mon[9]} + 1`;;
                Oct)mon[10]=`expr ${mon[10]} + 1`;;
                Nov)mon[11]=`expr ${mon[11]} + 1`;;
                Dec)mon[12]=`expr ${mon[12]} + 1`;;
                esac
        fi
fi
done  test.html
if [ $# -eq 2 ] 
then 
       
        
               grep -c $1.*$2 my_sample_log.txt|read mon1
               echo $2 $1 $mon1
                 echo ''$1''$mon1'' >>test.html
elif [ $# -eq 1 ] 
then 
      
      echo $1
       
     
      for month in Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
      do
           grep -c $month.*$1 my_sample_log.txt|read mon1  
            echo  ''$1''$month''$mon1'' >>test.html 
           echo $month $mon1
      done
fi 
 echo ' ' >>test.html

    
 
 

您可能感兴趣的文章:

  • grep 问题请教 ,大家帮忙看看
  • 请教grep如何排除搜索
  • 请教:grep "(^A-Z)..$" memo1是要找到什么样的行
  • 请教如何用grep全字匹配
  • linux bash shell命令:grep文本搜索工具简介
  • grep 过滤文本指教!
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • 利用grep可以取出某个字符所在文本的一行。那么用什么指令取出某字符串呢?
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • 文本搜索工具 GNU grep
  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)
  • 利用grep可以取出某个字符所在文本的一行。那么用什么指令取出某字符串呢?例如:
  • UNIX下 wc,grep,和修改文本文件的c程序的源程序那位高人能否提供一份? zero_baby@163.net
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下grep命令实现查找多个关键字(与关系和或关系)
  • if ! ps -ef|grep cp|grep zw|grep -v grep|read nouse 啥意思?
  • 在linux下ps -auxw | grep resin | grep -v grep| awk '{print $2}'|-exec kill -9 {} ;
  • 在linux/unix中如何用Runtime.getRuntime.exec()执行ps -ef | grep SSS | grep -v grep | awk '{print $2}'
  • 在文件中用grep找出某些行,如果同时满足包含好几个字符串是用多次grep吗
  • 'grep ^[A-D]' 和 'grep ^[ABCD]' ,结果是一样的吗?
  • 下面是用到的地方,请各位大侠多指教。 cat ../log/run_${DAYTIME}*|grep $Day| grep "resp,1062,"|./st
  • grep -Ev和grep -v有啥区别?(麻烦详细说明)
  • 关于 ps | grep 的问题
  • grep的单引号
  • grep如何过滤两个以上的选项
  • grep输出的相关问题
  • grep 搜索条件与的问题
  • 如何用grep来查找-或是--这个内容?
  • 求助!!!! GREP 、FIND问题 (在线等)
  • grep命令的怪事
  • grep出来以下内容该怎样进行显示?
  • UNIX/LINUX中grep查找文件个数有无限制
  • [求助]solaris下grep如何实现递归地查找某目录下的文件。
  • 多行 grep 工具 mgrep
  • grep 的使用(100分求救)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3