sort命令分析日志
很久没有更新blog了,上来冒个泡。
之前,常用cut,sort,uniq命令的组合分析程序的log,或者查看数据以便统计。例如:cut -d "|" -f 4 | sort | uniq -n -r。
今天遇到一个问题,需要查看多个用户的操作记录。数据第一列可顺利的按照时间排序,然而用户名在中间,既然是log,那源数据便可能是多个用户的交叉记录了。比如:
以下是引用片段: time0 | userA | action time1 | userB | action time2 | userC | action time3 | userA | action time4 | userC | action time5 | userB | action time6 | userC | action time7 | userB | action |
很显然,我们希望的顺序是:
以下是引用片段: time0 | userA | action time3 | userA | action time1 | userB | action time5 | userB | action time7 | userB | action time2 | userC | action time4 | userC | action time6 | userC | action |
我们既想按照中间的数据的排序又要保持数据的完整性!也许可以用其他的命令实现这个,但我更倾向于使用常用的命令搞定复杂的事情。
其实sort命令是可以实现这个的。sort的-t选项可以实现cut的-d功能,再利用+m -n参数可以实现cut的-f的功能,只是,sort的这个+m -n是从0开始计数的。+m -n是指从第m个字段开始,到第n个字段排序,其中包含第m个但不包含第n个。比如:sort -t "|" +1 -2 filename 就可以得到我们想要的结果了。
sort的功能是排序,应用起来会有很多种排序的方式,可以用指定的参数来控制:
- d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。这个选项对 uniq -d 后的结果尤为有用。
- f 将小写字母与大写字母同等对待。也就是忽略大小写。
- I 忽略非打印字符。
- M 作为月份比较:“JAN”<“FEB”
- r 按逆序输出排序结果。这个可与 -d 同时使用,实现数字从大到小的排列
还有一个很实用的功能,如果你想把一个过滤后的文件内容重新写入到原文件,那么- o 参数可以达到这个要求,但是效率呢?嗯,是个问题,看取舍了!毕竟这种情况重定向是不行的。
- o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。
很多系统实用小工具就是用这种常用名字组建的,嗯哼。
建议继续学习:
- Linux命令行里的“瑞士军刀” (阅读:10272)
- server日志的路径分析 (阅读:10201)
- AWStats简介:Apache/Windows IIS的日志分析工具的下载,安装,配置样例和使用(含6.9中文定义补丁) (阅读:8950)
- 利用脚本分析日志并利用snmp自定义OID,再通过cacti画图 (阅读:8747)
- tomcat catalina.out日志切割每天生成一个文件 (阅读:8135)
- 分布式日志系统scribe使用手记 (阅读:8095)
- AWStats是一个基于Perl的WEB日志分析工具。 (阅读:6161)
- 使用nginx记日志 (阅读:5174)
- shell的sort命令的-k参数 (阅读:4851)
- 大于2GB的Listener.log和运行超过198天的主机上的Oracle实例 (阅读:4971)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:yayu 来源: 芽雨快跑
- 标签: sort 日志
- 发布时间:2009-10-10 13:44:25
- [71] IOS安全–浅谈关于IOS加固的几种方法
- [70] Twitter/微博客的学习摘要
- [65] 如何拿下简短的域名
- [64] android 开发入门
- [63] Go Reflect 性能
- [62] find命令的一点注意事项
- [60] 流程管理与用户研究
- [59] 图书馆的世界纪录
- [59] 读书笔记-壹百度:百度十年千倍的29条法则
- [58] Oracle MTS模式下 进程地址与会话信