我有一个文件名:printing_usage_file
john.smith
MarcoRibeiro
john.smith
john.smith
lial_chen14
我需要输出
Printing users:
john.smith
MarcoRibeiro
lial_chen14
当我使用 printing_summary.pl -a printing_usage_file 表示时,在屏幕上。 我应该在perl脚本中写什么?
答案 0 :(得分:0)
看起来好像只想消除重复的用户。这是一种方式。唯一的区别是输出的排序顺序与它从文件中输入的顺序不同。
它使用外部模块Getopt :: Long来处理参数,然后使用哈希来消除重复:
代码:
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
my $action;
GetOptions("a=s" => \$action,);
if ($action eq 'printing_usage_file'){
print_usage_file();
}
sub print_usage_file {
open my $file, '<', 'input.txt'
or die "Can't open the file!: $!";
my %user_hash;
while (my $line = <$file>){
chomp $line;
$user_hash{$line} = 1;
}
print "\nPrinting users:\n\n";
for my $user (keys %user_hash){
print "$user\n";
}
}
输出:
$ ./printing_summary.pl -a printing_usage_file
Printing users:
john.smith
MarcoRibeiro
lial_chen14
答案 1 :(得分:0)
假设我理解你的要求,这应该有用。
#!/usr/bin/perl
use strict;
my (%names,$i);
foreach (<>) { $names{$_} = ++$i if !$names{$_};}
print "Printing users:\n";
print $_ foreach sort {$names{$a} <=> $names{$b}} keys %names;
这将以删除重复项的方式显示用户在文件中找到的顺序。
示例输出:
~/oneoffscripts $ perl -a printing_summary.pl printing_usage_file
Printing users:
john.smith
MarcoRibiero
lial_chen14