我有一个包含以下数据的文件:
col1 col2 ext3 rw
col1 col2 ext3 rw
col1 col2 ext3 rw
col1 col2 nfs rw
col1 col2 ext4 rw
col1 col2 iso9660 ro
我要做的是读取文件并从第3列打印唯一值。第3列包含ext3,ext4,nfs ......
目前我的输出是:
ext3
ext3
ext3
nfs
ext4
iso9660
我的输出应该是:
ext3
nfs
ext4
iso9660
以下是我迄今为止所尝试的内容:
#!/usr/bin/perl
use strict;
use warnings;
my $filename = $ARGV[0];
open(FILE, $filename) or die "Could not open file '$filename' $!";
while (<FILE>)
{
chomp;
my $line = $_;
my @elements = split (" ", $line);
my $row_name = $elements[2];
print $row_name . "\n";
}
close FILE;
如何让它在同一程序中打印唯一值? 谢谢。
答案 0 :(得分:3)
您可以使用哈希来跟踪之前看过的值。
此外,不需要显式打开在命令行上命名的文件。你可以使用<>
来阅读它们,就像这样
use strict;
use warnings;
my %seen;
while (<>) {
my $col3 = (split)[2];
print "$col3\n" unless $seen{$col3}++;
}
<强>输出强>
ext3
nfs
ext4
iso9660
答案 1 :(得分:0)
使用perl oneliner
perl -lane 'print $F[2] if ! $seen{$F[2]}++' file.txt
或者在您的脚本中,通过添加perlfaq4 How can I remove duplicate elements from a list or array?
%seen
哈希
use strict;
use warnings;
my $filename = $ARGV[0];
open(FILE, $filename) or die "Could not open file '$filename' $!";
my %seen;
while (<FILE>)
{
chomp;
my $line = $_;
my @elements = split (" ", $line);
my $row_name = $elements[2];
print $row_name . "\n" if ! $seen{$row_name}++;
}
close FILE;