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的结果逐行解析处理。

 

你可能感兴趣的:(cookie)