使用perl在给定的推荐中打印文本

时间:2015-05-20 16:43:32

标签: perl

我有一个文件名: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脚本中写什么?

2 个答案:

答案 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