3

ライブラリを監査し、インストールされているソフトウェアのリストを別のマシンのリストと比較して、同じもので動作していることを確認するperlスクリプトをコーディングしています。生データを取得して、サイズの2つの2次元配列に配置しましたNx4。ここで、Nはソフトウェアタイトルの数です。例えば:

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

次に、2つのリストを比較して、レベルの違いのファイルが欠落しているかどうかに関係なく、不一致を見つける必要があります。まだPerlプロではありませんが、これを行うために私が考えることができる唯一の方法は、最初の配列の各要素を他の配列の各要素と比較して、異なるレベルの一致するファイルセットまたは一致するファイルセットがまったくないかどうかを最初に探すことです。考えられるすべての違いを確実に見つけるために、他のリストでこのプロセスを繰り返す必要があります。明らかに、この手順では、n^2を超える効率を見ています。grep20,000以上のエントリを持つライブラリを比較するときに、これを回避するために利用できるアプリケーションやそれに類似したアプリケーションがあるかどうか疑問に思いました。

つまり、単に2つの交差点を見つけるのではなく、2つの2次元配列を比較し、各リストの違いを追跡する必要があります。

助けてくれてありがとう!

4

1 に答える 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'
};
于 2013-01-09T22:13:24.083 に答える