Perl 比较两个文件中具有图案的线

Perl 比较两个文件中具有图案的线,perl,Perl,让我们举个例子 如果我的数据集是这样的。 日志1(x.LOG)包含 【代码>信息>网站>网站>信息@1101102266 6个月的共有6个月的共有6个月的共有6个月的共有4个月的共有4个月的共有6个方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方

让我们举个例子

如果我的数据集是这样的。 日志1(x.LOG)包含

【代码>信息>网站>网站>信息@1101102266 6个月的共有6个月的共有6个月的共有6个月的共有4个月的共有4个月的共有6个方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方#;T=1102266 INFO@1102334 PHResourceLayer_Z4:mti_clk_chk:检查来自SV的mti、MTI10 clk的周期;T=1102334 日志2(y.LOG)包含

【代码>UVM>UVM>UVM-UUUUUUUUUUUUUUUUUUUUUUUUwawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawa#;T=1092507 UVM_INFO@1092563 reporter Z4_COREA:mti_clk_chk:检查SV的mti、MTI10 clk周期;T=1092563 那么第一行我得查一查

测试开始;T=1102266 及

测试开始;T=1092507 因为T的值不相同,所以它应该在输出文件中给出这些细节,说明细节不匹配

同样地,对于2号线,我们必须进行匹配

从SV检查MTI、MTI10时钟周期;T=1102334

从SV检查MTI、MTI10时钟周期;T=1092563
这里T的值也不匹配,所以将其传递到输出文件

我必须在两个日志文件中逐行比较具有特定关键字的详细信息
mti\u clk\u chk
。到目前为止,我能够从两个文件中使用所需的关键字逐行解析它到第三个文件中。现在,我想比较冒号后面的关键字(
)后面的数据,在输出文件中,我必须将第一个数据集中不匹配的行与第二个数据集以及第一个数据集中不存在的第二个数据集中的行数进行比较,然后打印第一个数据集中不匹配的行数。下面给出了解析两个日志文件后的数据。请帮助我了解如何在两组数据之间比较每行中提供的详细信息

打开(文件“>FILE.txt”);
我的@array2=;
foreach$389;(@array&@array1){
@array2=grep{$\=~“mti\u clk\u chk:”}(@array);
打印文件“@array2”;
打印文件“\n\n\n”;
@array2=grep{$\=~“mti_clk_chk:”}(@array1);
打印文件“@array2”;
关闭(文件);
出口
}
解析两个输入日志(x.log和y.log)后,file.txt中的示例数据

INFO@576892 mti_clk_chk:run_刺激调用;T=576892
在1102266@1102266 6 6 6个月内,6 6个月内,6个月内,6个月内,6个月内,10个月月内,10个月内,6个月内,6个月内,6个月内,6个月内,6个月内,6个月内,6个月内,6个月内,6个月内,6 6个月内,6 6个月月内,6 6个月月内,6个月日日日日日日日日日日日日日日日日日日日日日日日日日日,各各各各各各支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支支);T=1102266
INFO@1102334 PHResourceLayer_Z4:mti_clk_chk:检查来自SV的mti、MTI10 clk的周期;T=1102334
INFO@1102372 mti_clk_chk:mti clk的检查周期;T=1102372
INFO@1102377 mti_clk_chk:mti时钟的周期值:3.125000 ns;T=1102377
INFO@1102377 mti_clk_chk:mti时钟生成正确;T=1102377
INFO@1102377 mti_clk_chk:MTI10 clk的检查周期;T=1102377
INFO@1102418 mti_clk_chk:MTI10时钟的周期值:31.250000纳秒;T=1102418
INFO@1102418 mti_clk_chk:MTI10时钟生成正确;T=1102418
INFO@1102717 PHResourceLayer_Z4:mti_clk_chk:完成所有时钟周期检查;T=1102717
INFO@1148661 mti_clk_chk:C代码退出执行。代码=;T=1148661
INFO@1148661 mti_clk_chk:*************************************SV END**************************;T=1148661
UVM_INFO@0 reporter测试台。顶级模块。\mti_clk_chk::main:mti_clk_chk_STIM已启动。。。。。;T=0
UVM_INFO@0 reporter testbench.top_level_模块。\mti_clk_chk::main:run_刺激调用;T=0
据UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU35;T=1092507
UVM_INFO@1092563 reporter Z4_COREA:mti_clk_chk:检查SV的mti、MTI10 clk周期;T=1092563
UVM_INFO@1092598 reporter testbench.顶级模块。\mti_clk_chk::main:mti clk的检查周期;T=1092598
UVM_INFO@1092605/proj/rru2_verif/usr/Tilak/SV_UVM/testbench/data_ipdss/v_ms_mti_stim_vip/testbench/classes_v/mti_clk_chk.SV(147)UVM_test top.default_env.default_sequencer100@mti_clk_chk:INFO:mti时钟周期值:3.12500ns;T=1092605
UVM_INFO@1092605 reporter testbench.顶级模块。\mti_clk_chk::main:mti时钟生成正确;T=1092605
UVM_INFO@1092605 reporter testbench.顶级模块。\mti_clk_chk::main:MTI10 clk的检查周期;T=1092605
UVM_INFO@1092655/proj/rru2_verif/usr/Tilak/SV_UVM/testbench/data_ipdss/v_ms_mti_stim_vip/testbench/classes_v/mti_clk_chk.SV(165)UVM_test_top.default_env.default_sequencer100@@mti_clk_chk mti_chk:INFO:MTI10时钟的周期值:31.250000ns;T=1092655
UVM_INFO@1092655 reporter testbench.顶级模块。\mti_clk_chk::main:MTI10时钟生成正确;T=1092655
UVM_INFO@1092850 reporter Z4_COREA:mti_clk_chk:所有时钟周期检查完成;T=1092850
UVM_INFO@1092886/proj/rru2_verif/usr/Tilak/SV_UVM/testbench/data_ipdss/v_ms_mti_stim_vip/testbench/classes_v/mti_clk chk.SV(186)UVM_test_top.default_env.default_sequencer100@@mti_clk chk mti_chk:INFO:****************;T=1092886

如果我正确理解了您的输入数据,您需要

  • 从文件1中读取行
    • 筛选包含筛选关键字的行
      mti\u clk\u chk:
    • 将所有内容存储在关键字之后以进行比较
  • 与文件2相同
  • 打印文件1中的行,其比较字符串在文件2中找不到
  • 对于文件2,反之亦然
针对您的问题提出的解决方案:

#/usr/bin/perl
使用警告;
严格使用;
使用自动模具;
使用特征qw(例如);
“用法:$0\n”
如果@ARGV<2;
my($log1,$log2)=@ARGV;
#日志文件提取器函数
子提取器($){
我的($file)=@;
我的%行;
我的订单;
#解析日志文件内容

打开(我的$fh,'我编辑了您的问题,以使输入和输出更具可读性。请检查我是否无意中删除了一些相关信息。非常感谢@StefanBecker,您的代码工作正常,但我需要在