如何用Perl截取报文
在实际生产环境中,常常需要从后台日志中截取报文,报文的形式类似于
<InterBOSS>
...
...
...
</InterBOSS>
一个后台日志有多个报文,每个报文可由操作流水唯一确定。
以前用AWK写过一个,程序如下:
beginline=`awk 'BEGIN{i=0}{if($0~"<InterBOSS>") i=NR;if($0~"'$oprseq'"){print i;exit}}' $logname`
endline=`awk 'NR>'$beginline'{if($0~"</InterBOSS>"){print NR;exit}}' $logname`
awk 'NR>='$beginline'&&NR<='$endline'{print $0}' $logname
学了Perl以后,发现Perl很适合写类似逻辑的脚本,现改写如下:
#!/usr/bin/perl
use strict;
my $flag=;
my $line;
while(<>){
if(/<InterBOSS>/ or $flag eq ){
$line .=$_;
$flag=;
}
if(/<\/InterBOSS>/){
$flag=;
if($line =~ $ARGV[]){
print $line;
last;
}
$line='';
}
}
思路是:
将每一个报文作为一个整体,放到$line中,然后验证给定的操作流水是否在$line中,如果在,则输出$line,如果不在,则将$line置为空,继续循环,直到遇到下一个报文的<InterBOSS>,$line才开始填充。
那么如何确保<InterBOSS>和</InterBOSS>之间的行填充到$line中呢?在这里,引入了一个变量$flag进行判断,默认为0,在遇到<InterBOSS>时,将其置为1,在遇到</InterBOSS>时,又将其置为0。判断是否填充的条件有两个:一、匹配<InterBOSS>,二、$flag等于1,两者只要符合一个即可,这样就可确保<InterBOSS>和</InterBOSS>之间的行填充到$line中。
如何用Perl截取报文的更多相关文章
- 如何用perl将表格中不同列的数据进行拼凑,然后将拼凑后的数据用“|”连接在一起
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据进行拼凑,然后将拼凑后的数据用“|”连接在一起. 表格内容如下: 员工号码 员工姓名 职位 入职日期 1001 张三 销售 1980/12/ ...
- 如何用Perl对Excel的数据进行提取并分析
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了一个表的数据量统计日报,主要是针对数据库中使用较频繁,数据量又较大的31张表.该日报有两个sheet组成,第一个sheet是数据填写,第二个sh ...
- perl 截取 fastq文件
#!/usr/bin/perl -w use warnings; use strict; input_fastq trim_length}; ; my ($fastq, $trim_length) = ...
- 在命令行下使用perl
http://blog.sina.com.cn/s/blog_4af3f0d20100g9oz.html aaa@domain.com 2aaa@domain.com 111bbb@home.com ...
- Perl连接Sqlite数据库
Sqlite是一个小巧的嵌入式关系型数据库,几乎可以嵌入所有编程语言,特别是C,C++,PHP,Perl等.这里就介绍如何用Perl连接并操作Sqlite数据库. use DBI; # perl用以操 ...
- perl 引用(数组和hash引用) --- perlreftut - Mark 的一个简单的'引用'教程 ---Understand References Today. --Mark Jason Dominus, Plover Systems (mjd-perl-ref+@plover.com)
https://blog.csdn.net/fangwei1235/article/details/8570886 首页 博客 学院 下载 论坛 APP 问答 商城 活动 VIP会员 招聘 ITeye ...
- monitor a local unix domain socket like tcpdump
Can I monitor a local unix domain socket like tcpdump? - Super User https://superuser.com/questions/ ...
- [转] TCP数据包重组实现分析
PS: 这个实现对于某些特定情况未必是最佳实现,可以用数组来代替队列来实现 参照TCP/IP详解第二卷24~29章,详细论述了TCP协议的实现,大概总结一下TCP如何向应用层保证数据包的正确性.可靠性 ...
- SWIFT国际资金清算系统
SWIFT又称:“环球同业银行金融电讯协会”,是国际银行同业间的国际合作组织,成立于一九七三年,目前全球大多数国家大多数银行已使用SWIFT系统.SWIFT的使用,使银行的结算提供了安全.可靠.快捷. ...
随机推荐
- javascript变量的作用域
javascript变量的作用域 基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象 讲一个值赋值给变量时,javascript解析器首先要确定是基本类型 ...
- MySql UDF 调用外部程序和系统命令
1.mysql利用mysqludf的一个mysql插件可以实现调用外部程序和系统命令 下载lib_mysqludf_sys程序:https://github.com/mysqludf/lib_mysq ...
- Untiy3D开发小贴士 OnEnabled与OnDisabled
设某个组件为NewBehaviour OnEnabled被调用的情况: 1.GameObject添加组件的时候,即AddComponet<NewBehaviour> : 2.包含3.已添加 ...
- iPhone6/6 Plus兩款大屏智能機
蘋果終於順應時代潮流,於今年推出了iPhone6/6 Plus兩款大屏智能機.但很快就有人開始懷念老款iPhone的“一手掌控”,畢竟不是所有人都有一雙大手.不過近期就有傳言稱,蘋果將於明年重新推出一 ...
- wampserver解决“不能切换在线”及运行“404问题”
初次安装使用wampserver2.2,由于各个电脑安装的应用或是电脑型号不一样会出现以下问题: 1.安装后,不能出切换“服务器在线”或是“服务器离线” 2.设置站点后,运行编写好的代码出现404错误 ...
- (一)Linux相关内容的简介
1.Linux内核官网:www.kernel.org 2.Linux主要发行版本: (1)redhat 服务器中常见(部分功能收费); (2)Ubuntu 图形界面较好,但是服务器中很少用: (3 ...
- Third Day:正式编程第三天,学习实践内容TextView跑马灯、AutoCompleteTextView、multiAutoCompleteTextView以及ToggleButton、checkedBox、RadioButton等相关实践
2.针对Focused的TextView跑马灯(文字较多一行无法显示)效果 针对单个TextView的跑马灯效果,可直接在TextView控件参数中添加三个属性: android:singleLine ...
- MSDN杂志上Wix相关的文章
使用 MSBuild 和 Windows Installer XML 执行自动发布: http://msdn.microsoft.com/zh-cn/magazine/cc163456.aspx 用于 ...
- 业务安全通用解决方案——WAF数据风控
业务安全通用解决方案——WAF数据风控 作者:南浔@阿里云安全 “你们安全不要阻碍业务发展”.“这个安全策略降低用户体验,影响转化率”——这是甲方企业安全部门经常听到合作团队抱怨.但安全从业者加入公司 ...
- 你的应用是如何被替换的,App劫持病毒剖析
一.App劫持病毒介绍 App劫持是指执行流程被重定向,又可分为Activity劫持.安装劫持.流量劫持.函数执行劫持等.本文将对近期利用Acticity劫持和安装劫持的病毒进行分析. 二.Activ ...