Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何读取2个文件并打印匹配的图案?_Linux_Perl - Fatal编程技术网

Linux 如何读取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++)

我试图读取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++){
  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后,它起作用了。