`
zl198751
  • 浏览: 278742 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Shell 脚本实例分析(cookie_log 解析)

 
阅读更多

通过sort + uniq可以完成内容去重的目的,再加上awk的强大解析功能,可对大量数据进行良好筛选。

 

cat webx.log.20 | grep com.alibaba.intl.ae.biz.marketing | grep rpc | awk -F "channel:" '{print $2}' | awk '{print $1 "->" $3}' | sort -n | uniq -c | sort -nr 

 

sort 用法:

http://hi.baidu.com/chichushanren/item/9e49cd510e2d829c08be1737

 

新加shell脚本,用于日志统计。

gmalipay.sh  ipayserver 'grep "GET /alipay.alibaba.com/checkout.htm" /home/log/out/logs/cookie_logs/27/cookie_log |grep "****" -c'  | awk '{sum=sum+$1} END{print sum}' 

 

 

 

业务背景:

分布式机器8台,记录一天的cookie log。需要解析这8台机器上的日志,扫描出来访问正常detail页面和商铺detail页面的产品ID。排除爬虫和不排除爬虫。

 

附件中包含4个解析日志shell脚本:

解析单个cookie log

analyzeToProductId

批量解压并解析多个cookie log

multest

multestWithOutSpider

将多种解析方案合并到一个文件中

allAnalyze

 

analyzeToProductId:包含解析cookie log的基础逻辑。将访问detail和store的id解析出来,分别输出到文件。

 

 

grep "GET /www.aliexpress.com/wholesaleproduct/wholesaleProductDetail.htm" $1 |grep "productId=[0-9]\{9\}" -o |awk '{split($0,a,"="); print a[2]}' > $1.detail

 

grep -Eo "GET /www.aliexpress.com/fm-store/[0-9]{5,6}/[0-9P]{1,20}\-[0-9]{9}/|GET /www.aliexpress.com/store/[0-9]{5,6}/[0-9P]{1,20}\-[0-9]{9}/" $1 | awk '{split($0,a,"/");split(a[5],b,"-"); print b[2]}' > $1.store

 

 $1:通过命令输入的文件名。

-E, -o: grep参数,-E使用扩展正则表达式语法,支持或逻辑 | 。 -o, 仅将匹配的字符输出到流中。

[0-9]{5,6}/[0-9P]{1,20}\-[0-9]{9}:grep支持正则表达式。
awk '{split($0,a,"/");split(a[5],b,"-"); print b[2]} :awk语法,awk '/AL/ {print $3,$2}' ,将正则匹配的字符串/AL/ 输入到{}中进行操作。$0,表示输入的字符流。若没有添加正则表达式,则将输入流全部进行{}进行操作。

 

 

 

multest,multestWithOutSpider:批量解压,解析8台机器日志。

 

for file in ` ls $1 `

do

        if [ `echo $file | grep -E ".*\.zip"` ]

        then

            len=${#file}

            temp=${file:0:len-4}

            gunzip -c $1/$file > $1/$temp

            echo unzip $1/$file to $1/$temp success!

        fi

done

 

echo =========Unzip success!=============

 

echo =========Analyze begin=============

 

for file in ` ls $1 `

do

        if [ `echo $file | grep -E "cookie_log_[0-9]*_[0-9]*" | grep -v "\."` ]

        then

            echo ---------------------------start analysising ... $file

            start_time=`date +"%Y-%m-%d %H:%M:%S"`

 

            grep "GET /www.aliexpress.com/wholesaleproduct/wholesaleProductDetail.htm" $1/$file |grep "productId=[0-9]\{9\}" -o |awk '{split($0,a,"="); print a[2]}' > $1/$file.detail

 

            grep -Eo "GET /www.aliexpress.com/fm-store/[0-9]{5,6}/[0-9P]{1,20}\-[0-9]{9}/|GET /www.aliexpress.com/store/[0-9]{5,6}/[0-9P]{1,20}\-[0-9]{9}/" $1/$file | awk '{split($0,a,"/");split(a[5],b,"-"); print b[2]}' > $1/$file.store

 

            end_time=`date +"%Y-%m-%d %H:%M:%S"`

            start=`date -d  "$start_time" +%s`  

            end=`date -d  "$end_time" +%s`

            echo ---------------------------end analysising $1  time used: `expr $end - $start` seconds

            echo 

 

        fi

done

 

for file in ` ls $1 `: 遍历脚本输入参数$1对应目录的所有文件.
if [ `echo $file | grep -E ".*\.zip"` ]:判断文件名是否以.zip结尾。 主要需要在命令外加`` 重音符号。
${#file}:变量file的字节长度。
${file:0:len-4}:变量file截取字节,从(0,len-4)。

 gunzip -c $1/$file > $1/$temp:解压。用unzip无法重命名解压出来的文件。

 

 

allAnalyze:将普通detail和商铺detail的解析结果合并在一块,并添加爬虫标记。脚本中对每条符合的记录进行if判断,效率比上面的脚本低很多,适合少量数据使用。

 

grep -E "GET /www.aliexpress.com/wholesaleproduct/wholesaleProductDetail.htm|GET /www.aliexpress.com/fm-store/[0-9]{5,6}/[0-9P]{1,20}\-[0-9]{9}/|GET /www.aliexpress.com/store/[0-9]{5,6}/[0-9P]{1,20}\-[0-9]{9}/" $1 |while read line

do

 spider="" 

 if [ `echo $line|grep -E "Googlebot|bingbot|Baiduspider|Yahoo! Slurp|YandexBot|NHN Corp.|ia_archiver|msnbot"` ]

 then

    spider="/spider" 

 fi

 

 if echo $line |grep "GET /www.aliexpress.com/wholesaleproduct/wholesaleProductDetail.htm"

 then

   echo $line | grep "productId=[0-9]\{9\}" -o |awk '{split($0,a,"="); print a[2]$spider}' > $1.all

 else

   echo $line | grep -Eo "GET /www.aliexpress.com/fm-store/[0-9]{5,6}/[0-9P]{1,20}\-[0-9]{9}/|GET /www.aliexpress.com/store/[0-9]{5,6}/[0-9P]{1,20}\-[0-9]{9}/" $1 | awk '{split($0,a,"/");split(a[5],b,"-"); print b[2]$spider}' > $1.all

 fi

done

 

 

|while read line 

do:将grep的结果逐行解析处理。

 

分享到:
评论

相关推荐

    shell-work:shell常用分析命令和脚本

    shell-work shell常用分析命令和脚本 ##mysql监控脚本 ##cookielog分析脚本 ##线上java进程信息dump和机器信息dump脚本 ##cpu监控相关 ##dish 磁盘管理

    PHP脚本编程安全详解教程

    4. **会话管理**:使用session_start启动会话,并设置合适的session.cookie_secure和session.use_only_cookies选项来增强安全性。避免在URL中传递session ID,防止会话劫持。定期清理无效的会话数据。 5. **错误...

    Advanced Bash-Scripting Guide <>

    一个fork 出多个自己实例的脚本 11-2. printf 11-3. 使用read,变量分配 11-4. 当使用一个不带变量参数的read 命令时,将会发生什么? 11-5. read 命令的多行输入 11-6. 检测方向键 11-7. 通过文件重定向来使用read 11...

    PHP实例开发源码-php 高清影视资源聚合站(VGS).zip

    【PHP实例开发源码—php 高清影视资源聚合站(VGS)】 在PHP的世界里,构建一个高清影视资源聚合站是一项挑战性的工作,需要掌握一系列的PHP编程技能以及前端技术。VGS(Video Gathering Station)项目就是这样一个...

    Linux高级bash编程

    非官方的Shell脚本风格 33. 杂项 33.1. 交互式和非交互式的shells和脚本 33.2. Shell 包装 33.3. 测试和比较: 另一种方法 33.4. 递归 33.5. 彩色脚本 33.6. 优化 33.7. 各种小技巧 33.8. 安全话题 ...

    PHP实例开发源码—OpenNetAdmin 主机管理系统.zip

    此外,日志记录功能也是必不可少的,通过error_log()函数可以将错误信息写入日志文件,便于后期排查问题。 6. 邮件服务器管理: PHP的mail()函数或者第三方库如PHPMailer,可能被用于实现发送电子邮件的功能,如...

    开源基础架构和集群最佳实践

    其中`check_mysql.sh`是一个简单的Shell脚本,用于检查mysqld进程是否运行正常。 ##### 2、主机2上安装和配置keepalived 在主机2上执行类似的操作,确保两个节点之间能够顺利地进行故障转移。 ##### 3、各场景...

    vc++ 开发实例源码包

    MFCHtml 调用脚本 如题。 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信...

    vc++ 应用源码包_5

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    vc++ 应用源码包_1

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    vc++ 应用源码包_6

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    vc++ 应用源码包_2

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    vc++ 应用源码包_3

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    大数据基础课程设计报告.docx

    2. 编写脚本`sogou-log-extend.sh`,拆分时间字段并添加年、月、日、小时字段。 3. 使用`hadoop fs -put`命令将处理后的数据上传到HDFS。 4. 在Hive中进行一系列操作,包括创建数据库、表,导入数据,查询等。 - ...

    2021年最新版计算机技术与软件专业技术资格(水平)考试完整复习试题及答案.pdf

    15. **常见Web攻击**:SQL注入、Cookie欺骗、跨站脚本攻击(XSS)和信息泄露漏洞都是Web应用常见的安全威胁。 16. **主动响应**:当检测到入侵时,采取的措施可能包括针对入侵者的行动、修正系统、收集更多信息和...

    vendor_styx:Styx的自定义配置

    此外,Styx的自定义配置还可以结合其他shell脚本和自动化工具一起使用,以实现更复杂的网络管理任务。例如,你可以通过shell脚本来自动启动和停止Styx,或者在特定条件下动态修改配置。 在`vendor_styx-R`这个...

    python标准库

    shlex模块提供了一个词法分析器,用于解析命令行参数。 #### 5.10 zipfile模块 zipfile模块提供了读写ZIP文件的功能。 #### 5.11 gzip模块 gzip模块提供了读写GZIP压缩文件的功能。 ### 六、邮件和新闻消息处理 ...

    基于Python组装jmx并调用JMeter实现压力测试

    run_cmd = f'jmeter -n -t {jmx_file} -l {result_file} -j {log_file}' report_cmd = f'jmeter -g {result_file} -o {report_dir}' # 使用subprocess.Popen()获取命令输出 p1 = subprocess.Popen(run_cmd, shell=...

    《Python标准库》中文版

    shlex模块提供了词法分析的功能,用于解析命令行字符串。 **5.11 zipfile模块** zipfile模块提供了ZIP存档文件的操作功能。 **5.12 gzip模块** gzip模块提供了GZIP文件的压缩和解压功能。 #### 六、邮件和新闻...

Global site tag (gtag.js) - Google Analytics