我在我的Perl中有两个数组,我想从其他数组中的一个数组我的代码在Perl中如下所示。
#!/usr/bin/perl open (han5,"idstatus.txt"); open (han4,"routename.txt"); @array3 = <han4>; @array4 = <han5>; foreach (@array3) { @out = grep(/$_/,@array4); print @out; }
文件routename.txt
strvtran fake globscr
文件idstatus.txt
strvtran online strvtran online strvtran online globscr online globscr online globscr online globscr online globscr online Xtech dead Xtech dead fake online fake online fake connecting walkover123 online walkover123 online
现在我想从idstatus.txt grep globscr元素和输出应该是这样的:
使用veLocity split()将一个string拆分成一个数组似乎不起作用
Windows XP自动将数组初始化为零?
如何在BASH中制作3D数组?
如何将ls命令的输出传递给c ++中的数组
字符数组到LPCTSTR转换c
globscr online globscr online globscr online globscr online globscr online
我不想使用任何系统命令。 请在这里帮助我
在VB.NET中创build一个2Ddynamic数组
使用结构指针来分配数组
如何检查数组中的所有成员是否与unix bash中的某个成员相同
使用variables名创build一个数组bash,unix
您还需要使for循环使用不同的变量,因为在grep中, $_只会引用当前正在检查的grep列表中的元素。
尝试:
chomp(@array3 = <han4>); @array4 = <han5>; foreach my $routename (@array3) { @out = grep(/$routename/,@array4); print @out; }
这将输出:
strvtran online strvtran online strvtran online fake online fake online fake connecting globscr online globscr online globscr online globscr online globscr online
我不知道你想从idstatus.txt grep globscr是什么意思; 那么routename.txt扮演什么角色呢?
不要grep每行,请考虑建立一个正则表达式,其中包含路由名称作为替代:
use strict; use warnings; use autodie; open my $rnameFH,'<','routename.txt'; chomp( my @routename = <$rnameFH> ); close $rnameFH; my $names = '(?:' . ( join '|',map { "Q$_E" } @routename ) . ')'; my $regex = qr /^$names/; open my $idFH,'idstatus.txt'; while(<$idFH>){ print if /$regex/; } close $idFH;
在您的数据集上输出:
strvtran online strvtran online strvtran online globscr online globscr online globscr online globscr online globscr online fake online fake online fake connecting
该脚本创建一个OR型的正则表达式,通过join路由名称“|” (打印$names来看看这个)。 这里的map只能引用任何可能在名称中的元字符,例如.*^等,因为这些会影响匹配。
希望这可以帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。