从下图中调出我想进行模式匹配的“thread id:从第一和第二组行输出中。把模式存储在两个不同的阵列中并且想要比较相同。
(in)* : 2000:0:0:0:0:0:0:1/2026 -> 4000:0:0:0:0:0:0:1/2026;17, Conn Tag: 0x0, VRF GRP ID: 0(0), If: vms-2/0/0.16392 (4045), CP session Id: 0, CP sess SPU Id: 0, flag: 600023:c0, wsf: 0, diff: 0, FCB: 0
npbit: 0x0 thread id:23, classifier cos: 0, dp: 0, is cos ready: No, sw_nh: 0x0, nh: 0x0, tunnel_info: 0x0, pkts: 36935, bytes: 2807060
usf flags: 0x10, fabric endpoint: 16
pmtu : 9192, tunnel pmtu: 0
(out) : 2000:0:0:0:0:0:0:1/2026 <- 4000:0:0:0:0:0:0:1/2026;17, Conn Tag: 0x0, VRF GRP ID: 0(0), If: vms-2/0/0.0 (20429), CP session Id: 0, CP sess SPU Id: 0, flag: 600022:c0, wsf: 0, diff: 0, FCB: 0
npbit: 0x0 thread id:255, classifier cos: 0, dp: 0, is cos ready: No, sw_nh: 0x0, nh: 0x0, tunnel_info: 0x0, pkts: 0, bytes: 0
usf flags: 0x0, fabric endpoint: 16
pmtu : 9192, tunnel pmtu: 0
我编写了如下代码,并在$1中获得了输出。但无法将数字从$1输出中分离出来进行比较
my $file = '/homes/rageshp/PDT/SPC3/vsp_flow_output1.txt';
open(FH, $file) or die("File $file not found");
while(my $String = <FH>)
{
if($String =~ /thread id:(\d+)/)
{
print "$1 \n";
}
}
close(FH);
my @thrid = $1;
print "$thrid[0]";
2条答案
按热度按时间7ivaypg91#
变量
$1
在文件中迭代时会有不同的值。如果你在循环后尝试将其值存储在数组中,那么你只能得到最终值。你需要在循环中对它做些什么。再给你几个建议。
open()
的三参数版本。$_
。$/
设置为undef
),则可以同时获取所有ID。h4cxqtbf2#
Perl为这种情况提供了一种方便的方法--从diamond操作符中读取,不需要打开和关闭文件。
读取文件后,将与正则表达式进行匹配,并将感兴趣的数据存储在数组中。
一旦从一个文件中读取了所有数据,就以一种方便的方式输出结果以供目视检查。
以
script.pl input_file
身份运行提供的输入数据的输出示例