将终端中的命令应用于目录中的所有可能的文件组合

时间:2013-10-28 18:38:11

标签: perl file terminal combinations comm

快速提问:

我想使用以下一个/一个脚本来确定目录中不同文件的所有组合之间的公共行(该目录有25个文件)。

$ perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/'  file1 file2

$ comm file1 file2

但是,我想在所有可能的文件双组合上使用该命令(在我的情况下,这将是300个独特的文件组合)。

有没有办法修改此命令行脚本以同时考虑所有可能的组合?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

有一个CPAN模块可以有效地生成组合:Algorithm::Combinatorics

use strict;
use warnings;
use Algorithm::Combinatorics qw(combinations); 

my @files = `ls <DIRECTORY>`;
my $iterator = combinations(\@files, 2);

while ( my $comb = $iterator->next ) {
   my ($file1, $file2) = @$comb;
   // call comparison script here
}  

可能有一种更好的方法可以解决这个问题,而不是你想要做的事情,但这可以解决你的问题。