Perl 2D数组比较问题

3

我正在编写一个perl脚本,用于审计库并将已安装软件列表与另一台计算机上的列表进行比较,以确保它们使用的是相同的内容。我已经将原始数据放入了两个大小为Nx4的二维数组中,其中N是软件标题的数量。例如:

[Fileset1], [1.0.2.3], [COMMITTED], [Description of file]
[Fileset2], [2.4.2.2], [COMMITTED], [Description of a different file]
....

我现在需要比较这两个列表以找出差异,无论是缺失的文件还是级别差异。由于我还不是 Perl 专家,所以我能想到的唯一方法是将第一个数组的每个元素与另一个数组的每个元素进行比较,首先查找具有不同级别或根本没有匹配文件集的匹配文件集。然后我必须重复使用另一个列表来确保我找到了所有可能的差异。显然,通过这个过程,我正在寻找大于 n^2 的效率。我想知道是否有一些 grep 应用程序或类似的东西可以帮助我避免在比较具有 20,000 条目的库时出现这种情况。
简而言之,我需要比较两个二维数组并跟踪每个列表的差异,而不仅仅是找到两者的交集。
感谢您提前的帮助!
1个回答

3
输出结果有点麻烦,但我喜欢像这样的任务使用 Data::Diff
use Data::Diff 'Diff';
use Data::Dumper;

@a = ( ["Fileset1", "1.0.2.3", "COMMITTED", "Description of file" ],
       ["Fileset2", "2.4.2.2", "COMMITTED", "Description of a different file" ],
       ["Fileset3", "1.2.3.4", "COMMITTED", "Description of a different file" ] );

@b = ( ["Fileset1", "1.0.2.3", "COMMITTED", "Description of file" ],
       ["Fileset2", "2.4.2.99", "COMMITTED", "Description of a different file" ] );    

$out = Diff(\@a,\@b);    
print Dumper($out);

结果:

$VAR1 = {
  'diff' => [
    {
      'uniq_a' => [
        '2.4.2.2'
      ],
      'same' => [
        {
          'same' => 'COMMITTED',
          'type' => ''
        },
        {
          'same' => 'Description of a different file',
          'type' => ''
        },
        {
          'same' => 'Fileset2',
          'type' => ''
        }
      ],
      'type' => 'ARRAY',
      'uniq_b' => [
        '2.4.2.99'
      ]
    }
  ],
  'uniq_a' => [
    [
      'Fileset3',
      '1.2.3.4',
      'COMMITTED',
      'Description of a different file'
    ]
  ],
  'same' => [
    {
      'same' => [
        {
          'same' => '1.0.2.3',
          'type' => ''
        },
        {
          'same' => 'COMMITTED',
          'type' => ''
        },
        {
          'same' => 'Description of file',
          'type' => ''
        },
        {
          'same' => 'Fileset1',
          'type' => ''
        }
      ],
      'type' => 'ARRAY'
    }
  ],
  'type' => 'ARRAY'
};

那绝对看起来会省去我试图避免的那些步骤。从这里,我只需确定每个唯一条目所属的库,并将它们列在正确的组中。非常感谢!我正在学习使用Perl时,总是有更简单的方法... - nashter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接