Linux 如何读取2个文件并打印匹配的图案?
我试图读取2个文件,并试图打印两个文件中匹配的图案。 它不起作用。有人能告诉我哪里做错了吗Linux 如何读取2个文件并打印匹配的图案?,linux,perl,Linux,Perl,我试图读取2个文件,并试图打印两个文件中匹配的图案。 它不起作用。有人能告诉我哪里做错了吗 #!/usr/bin/perl open (FILE1, 'Dimension.csv'); my @dim=<FILE1>; close (FILE1); open (FILE2, 'SamsClub.dimension_refs.xml'); my @xml=<FILE2>; close (FILE2); for(my $i;$i<@dim;$i++)
#!/usr/bin/perl
open (FILE1, 'Dimension.csv');
my @dim=<FILE1>;
close (FILE1);
open (FILE2, 'SamsClub.dimension_refs.xml');
my @xml=<FILE2>;
close (FILE2);
for(my $i;$i<@dim;$i++){
for(my $j;$j<@xml;$j++){
if($xml[$j] =~ m/$dim[$i]/) {
print "Match found $xml[$j]";
}
}
}
xml示例文件
abc
defe
bald
<tem name="abc" version="2"/>
将文件读入数组时,它们也包含
\n
字符。因此,您的$dim[0]
包含abc\n
,因此不匹配
有人肯定会发布更优雅的解决方案,但您可以尝试:
my @dim = map { chomp; $_} <FILE1>;
my@dim=map{chomp;$};
将文件读入数组时,它们也包含\n
字符。因此,您的$dim[0]
包含abc\n
,因此不匹配
有人肯定会发布更优雅的解决方案,但您可以尝试:
my @dim = map { chomp; $_} <FILE1>;
my@dim=map{chomp;$};
添加:
在循环之前。添加:
在循环之前。显示两个文件的片段。但是,如果一个文件是CSV,另一个是XML,则需要一个更容易理解的脚本来比较字段
@dim
的元素包括换行符。当你配对的时候,你可能不想要它们,所以你需要把它们全部吃掉。“不工作”是什么意思?“不起作用”对于我们理解这个问题来说是不够的。你试的时候发生了什么?你得到了不正确的结果吗?你没有得到结果吗?如果结果不正确,是什么导致结果不正确?你在期待什么?你得到正确的结果了吗?如果是,它们是什么?别让我们猜。给我们看两个文件的片段。但是,如果一个文件是CSV,另一个是XML,则需要一个更容易理解的脚本来比较字段@dim
的元素包括换行符。当你配对的时候,你可能不想要它们,所以你需要把它们全部吃掉。“不工作”是什么意思?“不起作用”对于我们理解这个问题来说是不够的。你试的时候发生了什么?你得到了不正确的结果吗?你没有得到结果吗?如果结果不正确,是什么导致结果不正确?你在期待什么?你得到正确的结果了吗?如果是,它们是什么?不要让我们猜测。chomp
返回从参数列表中删除的字符总数。应该是map{chomp;$}
这里。是的,当然!非常感谢。更正。/@不管怎样,Bramar的解决方案更好:)/chomp
返回从参数列表中删除的字符总数。应该是map{chomp;$}
这里。是的,当然!非常感谢。更正。/@Bramar的解决方案更好:)/谢谢你的回答,事实上我也试过用chomp,但没用。调试后,我知道csv文件也包含控件M。所以在chomp之后,在移除控制M之后,它起作用了。谢谢你的回答,事实上我也尝试过chomp,但没有起作用。调试后,我知道csv文件也包含控件M。所以在吃过之后,在移除控制M后,它起作用了。