2022-10-23 438
阴差阳错的做的日志分析,前途未卜的这段日子,***还有点意思的可能就是手动的处理大量日志。总结一下。
日志文件的输入是动则几个G的文本。从N个这样的文件中得到一个列表,一个数字,一个比例。在什么工具都没有情况下,用shell命令不仅是验证系统数据的准确性的方法,也是一个很好的学习过程。
使用cut命令切割日志行
下面的一行典型的apache访问日志:
120.51.133.125 – – [26/Apr/2013:12:20:06 +0800] "GET /skins/skin_homepage.php?display=wvga&lang=ja_JP&pixel=720X1280&density=2.0&version=5.7&key=5146f54950f09f71750005ef&uid=1 HTTP/1.1" 200 4847 "http://t.co/rww3WDuhS5" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; YTB730)" 0 |
如果需要得到IP地址可以使用cut命令:
catlog|cut-d''-f1
-d ‘ ‘表示按照空格将行切开,-f1 取***个字段,这样得到的结果就是IP列表:
有时候拿到的文件是\t分隔,也可以使用cut切开,只不过需要多写一个$。
[l]$catlog|cut-d'\t'-f1cut:thedelimitermustbeasinglecharacter#-d'\t'会报错的cut-f2-d$'\t'infile#work
使用tr命令去掉字符,替换字符。如果拿到分割的文件:
catlog|tr-s''','
将空格替换成,文件变成csv:
catlog|tr-d''
上面的命令直接删除空格。
日志处理后经常会出现空行,tr命令去掉空行的原理就是将连续两个换行替换成一个换行:
catlog|tr-s'\n\n''\n'
使用uniq命令去重
试想得到IP列表,欲得到独立访问的IP列表。
[l]$catlog|cut-d''-f1|uniq-u
如果不仅仅是去重,还想统计每个IP访问次数,可以加一个参数c:
[l]$catlog|cut-d''-f1|uniq-uc
得到的格式形如:
1126.193.38.128549.98.156.154
前面的数字就是出现的次数。
使用awk/seed来处理日志
awk/seed是处理日志的最终的万金油。确实是什么都可以做。awk/seed是一门很大的学问。这里取我碰到的一个日志,日志格式形如:
display=wvga|||lang=ja_JP|||isActive=1|||pixel=720X1280|||density=2.0|||version=5.7|||key=5146f54950f09f71750005ef|||out=abc'3|||uid=1
如果我需要得到isActive=1的日志行,取到out=中’前一段,如上面的abc。
catl|grep"isActive=1|"|awk'match($0,/out=[^\x27]+/){printsubstr($0,RSTART+4,RLENGTH-4)}'
grep的功能是筛选isActive=1的行。awk 后面跟”的是awk语言。$0总是代表当前匹配的字段值,match substr是awk可以用的函数,当match时后面{}中的代码才会执行。当match,$0就是正则匹配的部分。RSTART,RLENGTH是awk可以使用的常量,分别表示开始匹配的开始下标,RLENGTH是匹配的长度。
在”中需要再使用’光转义是不行的,得用16进制的代码\x27。转16进制可以使用python代码 "’".encode("hex")得到
//惊讶awk就这么简单的解释了,可这连入门都算不上。
集合操作
试想我想得到两个列表的交际,并集,差集,统计中经常会碰到,比如我想获得昨天今天都在访问的IP,其实就是今天的IP列表和昨天IP列表的交集。
先定义两个简单的文件:
[l]$cata.txt12345[l]$catb.txt456789
如果想得到ab的交集4 5 ,可以使用下面的命令:
sort-ma.txtb.txt|uniq-d45
如果要得到并集1-9,可以:
sort-ma.txtb.txt|uniq123456789
如果想得到ab的差集,即a去掉ab的交集1 2 3
comm-23a.txtb.txt123
同理:ba的差集:
comm-13a.txtb.txtcomm-23b.txta.txt
上述两个命令等价。
comm命令就是compare功能,如果什么参数都不带呢得到的什么呢?
comma.txtb.txt123456789
diff命令以前经常看代码改了哪些:
diffa.txtb.txt1,3d0<1<2<35a3,6>6>7>8>9
原文链接:https://77isp.com/post/8544.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态