【经验总结】巧用awk:如何把多行日志变成一行
来源:互联网 发布:实名淘宝号购买平台 编辑:程序博客网 时间:2024/05/16 04:54
巧用awk:如何把多行日志变成一行
by katana
有很多同事在统计或者监控过程中遇到这样的问题:
一条日志被打印成多行,我又要分析其中某个域,又要分析用户内容…………
如何处理这种日志呢?
例如:
[2009-05-01 00:00:00] |第一条日志|0|192.168.0.1|Command|Operate|12345678|13800000000|日志内容主菜单。用功能回数字
1主菜单第一行
2主菜单第二行
3主菜单第三行
4主菜单第四行
[2009-05-01 00:00:03] |第二条日志|0|192.168.100.100|Command|Operate|12345678|13800000000|日志功能。用功能回数字
1功能一
2功能二
功能详情用手机登录www.example.com
……………………
都是以回车结尾,每行的域又不一样多,这样统计起来非常不便。
其实这个问题非常简单,我们只要抓住每条日志的特点就可以把多行日志还原成一行:
在上面的例子,我们可以分析得出:一条日志必定是以[日期 时间]开头
那么我只用在遇到"^/[2009-05-01 "的时候换行即可,语句如下(如果你想把日志中的换行用空格代替):
awk -F"|" '{if($0 ~ /^/[2009-05-01 /) {printf "/n%s ",$0} else {printf "%s ",$0}}END{printf "/n"}' test1.log|sed -n '2,$p' > test2.log
结果如下:
[2009-05-01 00:00:00] |第一条日志|0|192.168.0.1|Command|Operate|12345678|13800000000|日志内容主菜单。用功能回数字 1主菜单第一行 2主菜单第二行 3主菜单第三行 4主菜单第四行
[2009-05-01 00:00:03] |第二条日志|0|192.168.100.100|Command|Operate|12345678|13800000000|日志功能。用功能回数字 1功能一 2功能二 功能详情用手机登录www.example.com
即使如果用户内容中含有以"[2009-05-01 "的内容,我们还是可以找到其他特点,比如域个数大于2
只需在awk脚本中加上判断域个数条件:
awk -F"|" '{if($0 ~ /^/[2009-05-01 / && NF > 2 ) {printf "/n%s ",$0} else {printf "%s ",$0}}END{printf "/n"}' test1.log|sed -n '2,$p' > test2.log
注意:
在awk中使用printf函数的时候,要规范使用,要使用%s,以下用法
awk -F"|" '{if($0 ~ /^/[/) {printf "/n"$0" "} else {printf $0" "}}END{printf "/n"}' test1.log|sed -n '2,$p' > test2.log
会报错:
fatal: not enough arguments to satisfy format string
而且这个错误只有在你的日志够多的情况下才会出现,而一般平时用少量日志进行测试的时候不会错,真正执行大日志量的日志时就有问题了。
- 【经验总结】巧用awk:如何把多行日志变成一行
- linux 用awk gsub将一行变成多行
- awk 多行合并一行
- SQL:如何把多行查询结果,作为一行返回
- notepad中如何把多行转换为一行
- 把一行数据变成一个对象
- linux awk 多行转为一行
- 如何把图片变成透明
- 如何把开发者变成创始人?
- 如何把压缩文件变成图片
- 按固定长度截取一行变成多行--【叶子】
- SQL查询语句将一行变成多行
- awk多行日志排序输出
- [转载]如何把VIM变成source insight
- 如何把打印稿变成电子稿
- 如何把应用程序变成.exe执行文件
- 如何把应用程序变成.exe执行文件
- 如何把Vim变成source insight
- 条款4:尽量使用c++风格的注释
- 安装黑苹果遇到的问题
- How to run WPF - XBAP as Full Trust Application(如何运行WPF -作为完全信任的应用XBAP)
- Android 1.5 1.6 2.0 2.1 2.2 2.3 3.0的区别概要
- android 的JNI调用整理
- 【经验总结】巧用awk:如何把多行日志变成一行
- Hibernate二级缓存 ---- 最佳实践
- [转]matlab的Virtual Reality(虚拟现实)工具箱的应用简介
- 去耦电容与旁路电容的作用有何区别
- jQuery获取Select选择的Text和 Value(转)
- 系统调优小技巧&规则
- jQuery获取Select选择的Text和 Value(转)
- KVM虚拟机代码揭秘——QEMU的PCI总线与设备(上)
- 团购网源代码