日志处理中一些shell命令技巧

日志处理中一些shell命令技巧

阴差阳错的做的日志分析,前途未卜的这段日子,唯一还有点意思的可能就是手动的处理大量日志。总结一下。

日志文件的输入是动则几个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命令

 cat log | cut -d ' ' -f1 

-d ' '表示按照空格将行切开,-f1 取第一个字段,这样得到的结果就是IP列表

有时候拿到的文件是\t分隔,也可以使用cut切开,只不过需要多写一个$

[l]$ cat log | cut -d '\t' -f1 cut: the delimiter must be a single character #-d '\t'会报错的 cut -f2 -d$'\t' infile #work 

使用tr命令去掉字符,替换字符

-c:complement,用SET2替换SET1中没有包含的字符
-d:delete,删除SET1中所有的字符,不转换
-s: squeeze-repeats,压缩SET1中重复的字符
-t: truncate-set1,将SET1用SET2转换,一般缺省为-t

如果拿到分割的文件

cat log | tr -s ' ' ',' 

zzx@zzx103:~/dhcptest$ echo "aaacccddd ss " | tr -s [a-c]   # -s
acddd ss

zzx@zzx103:~/dhcptest$ echo "aaacccddd  ss " | tr -s " " ","  #d和s之间有2个空格,替换后压缩重复
aaacccddd,ss,

zzx@zzx103:~/dhcptest$ echo "aaacccddd  ss " | tr -t " " ","
aaacccddd,,ss,

zzx@zzx103:~/dhcptest$ echo "aaacccddd  ss " | tr -s "a" "b" #替换后压缩重复
bcccddd ss

将空格替换成,文件变成csv

cat log | tr -d ' ' 

上面的命令直接删除空格   

日志处理后经常会出现空行,tr命令去掉空行的原理就是将连续两个换行替换成一个换行

cat log | tr -s '\n\n' '\n' 

使用uniq命令去重

试想得到IP列表,欲得到独立访问的IP列表。

[l]$ cat log | cut -d ' ' -f1 | uniq -u 

如果不仅仅是去重,还想统计每个IP访问次数,可以加一个参数c

[l]$ cat log | cut -d ' ' -f1 | uniq -uc 

得到的格式形如:

1 126.193.38.128 5 49.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。

cat l | grep "isActive=1|" | awk 'match($0,/out=[^\x27]+/){print substr($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]$ cat a.txt 1 2 3 4 5 [ l]$ cat b.txt 4 5 6 7 8 9 

如果想得到ab的交集4 5 ,可以使用下面的命令:

sort -m a.txt b.txt | uniq -d 4 5 

如果要得到并集1-9,可以:

sort -m a.txt b.txt | uniq 1 2 3 4 5 6 7 8 9 

如果想得到ab的差集,即a去掉ab的交集1 2 3

comm -23 a.txt b.txt 1 2 3 

同理:ba的差集:

comm -13 a.txt b.txt comm -23 b.txt a.txt 

上述两个命令等价

comm命令就是compare功能,如果什么参数都不带呢得到的什么呢?

comm a.txt b.txt 1 2 3 4 5 6 7 8 9 

diff命令以前经常看代码改了哪些:

diff a.txt b.txt  1,3d0 < 1 < 2 < 3 5a3,6 > 6 > 7 > 8 > 9 

总结&&参考资料

窃以为能玩转上面这些命令,处理个日志问题不大了。

一篇介绍shell中集合操作的博文:

http://wordaligned.org/articles/shell-script-sets

一直放在收藏夹的shell方面的博客:

Linux Shell常用技巧

Linux Shell高级技巧 awk部分写的独好

转载于:https://www.cnblogs.com/hanxing/p/4113554.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

catia v5法矢数据软件_catia介绍

CATIA是英文 Computer Aided Tri-Dimensional Interface Application 的缩写。 是世界上一种主流的CAD/CAE/CAM 一体化软件。在70年代Dassault Aviation 成为了第一个用户&#xff0c;CATIA 也应运而生。从1982年到1988年&#xff0c;CATIA 相继发布了1版本、2版本、3版本&…

(十七)WebGIS中距离及面积测量的原理和实现以及坐标转换的简单介绍

文章版权由作者李晓晖和博客园共有&#xff0c;若转载请于明显处标明出处&#xff1a;http://www.cnblogs.com/naaoveGIS/。 1.背景 在这一章里我们将讨论基础工具栏中另外两个常用工具&#xff1a;距离测量工具盒面积测量工具。 距离测量工具要求实现如下功能&#xff1a; a.通…

添加,修改,删除

前面声明&#xff1a; Imports System.Data Imports System.Data.OleDb ―――――――――――――――― Private ds As DataSet New DataSet Private ds1 As DataSet New DataSet Private sqlStr As String Private strcon As String "ProviderSQLOLEDB.1;Data Sour…

分享:一款快速传输大文件、支持英文版的工具

最近朋友小A向我求助&#xff1a;因为工作需要常常需要往国外发送数百兆甚至接近1G的超大文件。试了好几种方式都不满意&#xff0c;国内的可以发送超大附件的网站&#xff08;如QQ邮箱,各种网盘&#xff09;不支持英文界面&#xff0c;外国朋友看不懂。而WeTransfer这种免费We…

access查询出生日期格式转换_从身份证中提取出生日期的3个方法和计算年龄和星座的方法...

在我们日常的工作当中&#xff0c;经常会遇到通过身份证来获取出生年月日的需求&#xff0c;今天就给大家介绍三种可以从身份证中提取出生年月日的方法。我们都知道身份证不同的区域是有不同的含义的&#xff0c;代表出生年月日的数字是第7位到第14位&#xff0c;也就说我们把这…

MySql函数大全

[colorred]字符串函数[/color]ASCII(str)  返回字符串str的第一个字符的ASCII值(str是空串时返回0)mysql> select ASCII(2);  -> 50mysql> select ASCII(2);  -> 50mysql> select ASCII(dete);  -> 100 ORD(str)  如果字符串str句首是单字节返回与AS…

AutoRun Pro Enterprise II 教程--- 教你制作软件工具箱教程清晰版(教程画面清晰,教程语音可以调高)...

AutoRun Pro Enterprise II是一款功能极为强大的自动运行菜单制作工具。可在一个所见即所得的环境中创建并编辑一个专业的CD、DVD自动运行界面并生成自动运行文件。在自动运行界面中支持打开或执行文件&#xff0c;打印文档&#xff0c;发送邮件&#xff0c;访问站点&#xff0…

access如何设置定期报表汇总_报表工具选型对比系列 - 大报表

有些报表查询出的数据行数可达千万甚至上亿&#xff0c;这类报表通常被叫做大报表&#xff0c;大多数情况下都是些清单明细数据报表&#xff0c;也有少量分组报表。针对大报表&#xff0c;如果像常规报表一样&#xff0c;将数据一次性全取再交给前端呈现是不可行的。一是等待时…

CuteEditor—Html在线编辑器的领航者,超强的asp.net编辑器控件

CuteEditor—Html在线编辑器的领航者 NET、ASP.NET控件及源码大汇总 http://bbs.topsage.com/dispbbs.asp?boardid123&Id145465转载于:https://www.cnblogs.com/asingna/archive/2009/12/02/1615334.html

PLSQL Developer远程连接oracle数据库

前提是本机已经安装oracle&#xff0c;利用 net configuration assistant 。若本机没有安装oracle&#xff0c;无需装oracle的方法请点我打开net configuration assistant&#xff0c;选择“本地网络服务名配置&#xff0c;如下图所示然后选择添加服务名选择远程数据库实例名主…

【转】漫画:Bitmap算法

漫画&#xff1a;Bitmap算法转载于:https://www.cnblogs.com/apeway/p/10786283.html

广州 adobe 技术者开发日回归

今天&#xff0c;adobe 在广州举行了adobe 技术者开发日&#xff0c;一大早就起来搭车赶到广州去参加这次活动。这次活动&#xff0c;参加人数很多&#xff0c;不完全统计基本有200以上人&#xff0c;真是很难得一次聚会。在这次大会上7yue 发表很多讲话&#xff0c;还有adobe …

spad 探测器_大面阵SPAD阵列集成微透镜阵列,填充因子改善明显

基于CMOS制造工艺可实现大面阵、单片式单光子雪崩光电二极管(SPAD)阵列&#xff0c;并受到如3D成像、荧光寿命成像等各种应用的青睐&#xff0c;但常常受到低填充因子(fill factor&#xff0c;指感光区域面积与像元面积的比值)的困扰。SPAD填充因子的数值通常小于5%&#xff0c…

Azure Backup 简介

ViswanathTata云Enterprise 项目经理&#xfeff;&#xfeff;AzureBackup是 Azure恢复服务的一部分&#xff0c;在安全高效的环境中对上传到 Azure的数据提供简单可靠的管理和保护。Azure Backup以经济高效的方式提供无限的存储空间和长期的数据保留&#xff0c;这些功能使其成…

笔记:Java虚拟机运行时数据区

Java虚拟机在执行Java程序的过程中会把它管的内存划分为以下若干个不同的区域&#xff1a; 1、程序计数器 程序计数器是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器&#xff1b;由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时…

高电压技术思维导图_钢铁技术:钢铁行业板坯连铸结晶器振动常见故障思维导图...

钢铁虾&#xff1a;(您距离钢铁虾只差关注)结晶器是连铸机的心脏&#xff0c;其振动偏差直接危及连铸过程的生产安全&#xff0c;其振动精度也往往与铸坯表面裂纹等缺陷息息相关。国内外常见板坯连铸结晶器振动形式有&#xff1a;①机械式振动&#xff1b;②双液压缸式振动&…

可以编辑vga格式文件的软件-PowerCreator Media Studio

vga格式的课件越来越多。不小心没有录制好的可见&#xff0c;想修改一下找了很久居然没有找到一个合适的软件。还有朋友给了一款&#xff1a;PowerCreator Media Studio用起来很方面&#xff0c;和premiere的操作很像。大赞。 安装后自带可以播放vga格式的播放器。 转载于:htt…

企业生产场景如何对CentOS进行分区

前言&#xff1a;我们买房子时&#xff0c;会考虑1室1厅&#xff0c;2室1厅&#xff0c;或3室2厅......&#xff01;那么具体如何选&#xff0c;是要看手中的money和家庭的人口数量。同理&#xff0c;服务器操作系统在分区时也是如此&#xff0c;到底分3个区&#xff0c;4个区&…

获取当前文件所在路径

代码 1 unitUnit1;2 interface3 uses4 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,5 Dialogs, StdCtrls;6 type7 TForm1 class(TForm)8 Button1: TButton;9 Button2: TButton;10 procedureButton1Click(Sender: TObject);11 procedureButton2…

删除隐藏版本信息 版本回退_git之版本穿梭术

上一篇主要针对使用git add和git commit两个指令提交文件到本地版本库做了详细的介绍&#xff0c;其实提交文件到版本库无非就是两个步骤&#xff0c;先将文件添加到暂存区&#xff0c;所有要提交的文件全部添加完毕&#xff0c;统一提交到版本库。那我们每一次提交都会生成一个…