Perl读取特定行

VCS编译会产生log文件,包含了Error、Warning和lint信息,特别是warning和lint的数量比较多,直接在Lint中查找比较麻烦,并且还存在大量我们不关系的Lint信息,此时可以通过Perl将我们关心的包含了Error、Warning和lint信息提取出来,进行查看会方便很多。DC综合都会产生很多log文件,使用Perl提取特定行也会很方便。

1.提取包含关键词的一行

Perl提取特定行具有两种方式:

方法1 :每次读取原文件的一行,依次处理

特点 :占用内存空间小,适用于大文件

方法2 :一开始读取原文件所有内容,再按行依次处理:

特点 :占用内存空间大,适用于小文件

方法1:每次读取一行

#!/usr/bin/perl -w
use strict  ;
my $eachline ;
my $result;
open (INFILE, "crm.log");       #提取crm.log文件内容
while ($eachline=<INFILE>) {
if  ($eachline =~ m/(Error:)|(Warning)/){   #匹配关键词
print $eachline."\n";
$result = $result . $eachline ."\n";  #将匹配行保存在result中
close(INFILE);
open(OUTFILE, ">report.log");  
print OUTFILE ($result);  #将result写入到report.log中

方法2:一次读取原文件所有数据

#!/usr/bin/perl
use strict  ;
my @array    ;
my $string   ;
my $result   ;
open (INFILE, "crm.log");
 @array = <INFILE> ;
foreach $string (@array){
if ($string =~ m/(Error:)|(Warning)/){
print $string."\n";
$result = $result . $string ."\n";
close(INFILE);
open(OUTFILE, ">outfile");
print OUTFILE ($result);

2.获取匹配行后面的多行

每行含有Error或者Warning则匹配成功,将匹配行在内的连续三行打印并写入文件report.log

#!/usr/bin/perl -w
use strict  ;
my $eachline ;
my $result;
my $line_cnt=0;
open (INFILE, "crm.log");
while ($eachline=<INFILE>) {
if  ($eachline =~ m/(Error)|(Warning)/){   #匹配 Error或者Warning
    $line_cnt = 0;
    print $eachline."\n";
    $result = $result . $eachline ."\n";
} elsif($line_cnt<3) { # 匹配成功后的连续三行写入report.log,并打印
   $line_cnt++         ;
   print $eachline."\n";
   $result = $result . $eachline ."\n";
close(INFILE);
open(OUTFILE, ">report.log");
print OUTFILE ($result);  

3.脚本的使用

  1. 复制三个代码中一个代码,保存到extract.pl文件中
  2. 将extract.pl放置在Linux环境中的一个目录下:
  3. 准备好crm.log文件放在同一个目录下
  4. 在terminal终端中设置执行权限: chmod a+x extract
  5. 在terminal终端中执行命令:extract
  6. 最后得到report.log文件,其中包含crm.log文件相应的Error和Warning信息
Perl读取特定行VCS编译会产生log文件,包含了Error、Warning和lint信息,特别是warning和lint的数量比较多,直接在Lint中查找比较麻烦,并且还存在大量我们不关系的Lint信息,此时可以通过Perl将我们关心的包含了Error、Warning和lint信息提取出来,进行查看会方便很多。DC综合都会产生很多log文件,使用Perl提取特定行也会很方便。1.提取包...
转载地址:http://blog.csdn.net/omohe/art ic le/details/1562515 使用 Perl 从文件 读取字符串,一般有两种方法: 1. 一次性将文件 的所有内容读入一个数组 (该方法适合小文件): open(FILE,"filename")||die"can not open the file: $!"; @filelist=FILE>;
本文转载于 http://blog.sina.com.cn/s/blog_55cbb3d10100pfjl.html 字符串 提取 是个麻烦有需要耐心的工作,如果针对一个文件,可以利用正则表达式 提取 某些字符串,如果你有成百上千个文件,则需考虑循环或文件夹操作,下面的代码介绍了如何 提取 一个文件夹(含子目录) 较多文件里的某一固定字符串。 $searchdir="c:/folder";
本文内容包括: Perl 的多进程自动化测试场景介绍 应用 Perl 多进程技术到自动化测试脚本小结参考资料在IT产品系统测试的自动化项目 ,经常有并 处理多个子任务的需求,为了提高测试效率,就需要用到多进程或者多线程编程。文章介绍了 Perl 多进程的用法和适用场景,以及 Perl 多进程和多线程的关系。同时结合企业级IT产品系统测试的自动化特点,介绍了 Perl 多进程在这方面的 应用 Perl 的多进程 Perl 的多进程 Perl 语言是一种非常强大的脚本语言,其广泛 应用 于系统维护,CGI(CommonGatewayInterface)编程,数据库编程和自动化测试 。多任务和并发处理一度被看作是判定优异操作系统的一个特
Perl 定时启动EDA工具 在 IC 设计 ,很多EDA工具使用具有前后关系,比如进 形式验证,比较Verilog代码和综合网表的一致性,就需要准备好网表.vg文件才能启动形式验证操作。而网表会在下班1个小时后才能产生。此时为了能够尽早启动形式验证,我们可以使用 Perl 脚本定时启动形式验证。 1、脚本原理 采用sleep进 等待,等待1个小时,使用system启动形式验证命令(本案例 ,假设在l...
这个错误提示意味着你正在尝试安装一个 Perl 脚本,但是系统 没有安装必需的 Perl 模块 perl -Getopt-Long。 要解决这个问题,你需要使用系统的包管理器(如 apt、yum 等)安装 perl -Getopt-Long 模块。具体命令可能因系统不同而有所不同,下面是几个可能的命令: - CentOS / RHEL: `sudo yum install perl -Getopt-Long` - Ubuntu / Debian: `sudo apt-get install libgetopt-long- perl ` - macOS(使用 Homebrew): `brew install perl -getopt-long` 安装完成后,你可以重新执 Perl 脚本,应该就可以运 了。