shell脚本分析日志中用户点击数的方法

发布时间:2019-11-27编辑:脚本学堂
分享一个用于分析日志文件中用户点击数的shell脚本,有shell自定义函数的用法,感觉很不错,有需要的朋友参考下。

linux系统中用于分析日志文件的工具,当然是非shell/ target=_blank class=infotextkey>shell脚本莫属了,当然perl或python也不错。

linux shell脚本,除了基本的语法外,主要是linux命令的灵活运用,可以完成很强大的功能,比如我们在运维中常碰到的日志分析功能。

这里提供的shell脚本,用于分析apache/ target=_blank class=infotextkey>apache服务器中的访问日志,从中得出用户点击数的排名,主要用到了scp命令awk命令、sort命令等。

完整代码:
 

复制代码 代码示例:

#!/bin/bash 
# 功能:分析日志显示用户点击数
# 整理:www.jb200.com
# 日期:2014/8/15 星期五

src_date_format=`date +%F` 
dst_date_format=`date +%Y%m%d` 
 
start_time=`date -d "15 minutes ago" +%Y-%m-%d" "%H:%M:%S` 
end_time=`date +%Y-%m-%d" "%H:%M:%S` 
 
src_access_content_name="access_content_log."$src_date_format".txt" 
dst_access_content_name="access_content_hit_"$dst_date_format".txt" 
upload_access_hit_name="content_tophit_"$dst_date_format".txt" 
 
src_userlogin_name="user_login_log."$src_date_format".txt" 
dst_userlogin_name="user_login_log."$dst_date_format."txt" 
upload_userlogin_name="user_login_"$dst_date_format".txt" 
 
genTopHitContent() 

  cd /u/tomcat5_rh/log/ 
  cp $src_access_content_name upload/$dst_access_content_name 
  cp $src_userlogin_name upload/$dst_userlogin_name 
  cd  upload 
  echo "--get log $src_access_content_name from 192.168.32.25:/u/tomcat5_rh/log/$src_access_content_name start.--" 
  scp root@192.168.32.25:/u/tomcat5_rh/log/$src_access_content_name . 
  cat $src_access_content_name >>$dst_access_content_name 
  echo "--get log $src_access_content_name from 192.168.32.25:/u/tomcat5_rh/log/$src_access_content_name end.--" 
   
  echo "--get log $$src_userlogin_name from 192.168.32.25:/u/tomcat5_rh/log/$src_access_content_name start.--" 
  scp root@192.168.32.25:/u/tomcat5_rh/log/$src_userlogin_name . 
  cat $src_userlogin_name >>$dst_userlogin_name 
  echo "--get log $$src_userlogin_name from 192.168.32.25:/u/tomcat5_rh/log/$src_access_content_name end.--" 
 
  cat $dst_access_content_name | awk 'BEGIN{FS="|";OFS=":"}{hit[$2]++;} END{for(i in hit){print i,hit[i]}}' > tmp 
 
  sort -t: -k 2 -g -r  tmp  | awk 'NR<=10'> $upload_access_hit_name 
 
  rm -f tmp 
  
echo $dst_userlogin_name 
echo $start_time 
echo $end_time 
echo $upload_userlogin_name 
  
cat $dst_userlogin_name |awk -F '|' -v starttime="$start_time" -v endtime="$end_time" '{if($2>=starttime&&$2<=endtime)print $1}' > $upload_userlogin_name  
  ftp -v -n 192.168.201.49<<END 
        user root tianyi09 
        binary 
        hash 
        cd u/upload 
        lcd /u/tomcat5_rh/log/upload/ 
        prompt 
        mput $upload_access_hit_name $upload_userlogin_name 
        bye 
END 

 
while true 
do 
  genTopHitContent   
  sleep 900  
done 

附,用shell命令分割大日志文件

有的日志文件没有限制大小,结果打不开,在linux中可以这样解决:

$ wc -l log.txt //计算一个文件的总行数;
 208363 log.txt
$ split -l 30000 log.txt newlog  #按照行数来分割文件。 本例是3万行生成一个文件。