0

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

第一种方式:

my @array = "/tmp/myfile.$device";
my %seen = ();
my $file = grep { ! $seen{ $_ }++ } @array;

第二种方式:

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

我该怎么做?

4

3 回答 3

4

您似乎忘记阅读文件了!

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

my %seen;
my @unique = grep !$seen{$_}++, <$fh>;
于 2013-02-01T15:17:47.067 回答
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到数组中。

于 2013-02-01T15:16:53.180 回答
0

如果你装配参数列表,你可以让 Perl 自动打开文件,使用:

perl -n -e 'BEGIN{@ARGV=("/tmp/myfile.device");} print if $count{$_}++ == 0;'
于 2013-02-01T15:45:09.253 回答