我有一个文件,它有以下数据:
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列打印唯一的值。
目前,我的产出是:
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;如何使它在同一个程序中打印唯一的值?谢谢。
发布于 2014-05-27 23:20:00
使用perl oneliner
perl -lane 'print $F[2] if ! $seen{$F[2]}++' file.txt或者在脚本中添加一个%seen哈希,如perlfaq4 How can I remove duplicate elements from a list or array?所示
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;发布于 2014-05-27 23:21:47
您可以使用散列来跟踪以前见过的值。
此外,在命令行上命名的文件不需要显式打开。您可以使用<>从它们中读取,如下所示
use strict;
use warnings;
my %seen;
while (<>) {
my $col3 = (split)[2];
print "$col3\n" unless $seen{$col3}++;
}输出
ext3
nfs
ext4
iso9660https://stackoverflow.com/questions/23900461
复制相似问题