文件中的唯一元素 - perl

时间:2013-02-01 15:13:44

标签: perl

我想从文件中获取独特的元素(行),我将通过电子邮件进一步发送。 我尝试了两种方法,但两种方法都不起作用:

第一种方式:

my @array = "/tmp/myfile.$device";
my %seen = ();
my $file = grep { ! $seen{ $_ }++ } @array;
第二种方式:

my $filename = "/tmp/myfile.$device";
cat $filename |sort | uniq > $file

我该怎么做?

3 个答案:

答案 0 :(得分:4)

你好像忘了阅读文件了!

open(my $fh, '<', $file_name)
   or die("Can't open \"$file_name\": $!\n");

my %seen;
my @unique = grep !$seen{$_}++, <$fh>;

答案 1 :(得分:1)

您需要打开文件并阅读。

“cat”是一个shell命令而不是perl

尝试这样的事情

my $F;
die $! if(!open($F,"/tmp/myfile.$device"));
my @array = <$F>;
my %seen = (); my $file = grep { ! $seen{ $_ }++ } @array;

如果文件未正确打开,die $!将停止程序并显示错误; @array=<$F>将上面打开的文件$F中的所有数据读入数组。

答案 2 :(得分:0)

如果你装备了参数列表,你可以使用以下命令使Perl自动打开文件:

perl -n -e 'BEGIN{@ARGV=("/tmp/myfile.device");} print if $count{$_}++ == 0;'