Perl脚本仅显示第一行文本文件

时间:2013-08-16 09:53:00

标签: perl

当我运行此脚本时,它只输出我的文本文件的第一行。

应该采用电子邮件地址列表并输出十个最常出现的域。

例如,Timmy @ yahoo.co.uk => 4              Joebloggs@hotmail.com => 3

 #!D:\Perl\bin\perl

    #Read file
    open F, "<Emails.txt" or die $!;
    while (<F>) {
        print $_;
    {

    close F;

    perl ne 
      $s{$_}++ 
    }{ 
      print map "$s{$_}: $_",
       (sort {$s{$b} <=> $s{$a}} keys %s)[0..9] }}

3 个答案:

答案 0 :(得分:5)

这不是:

while (<F>) {
    print $_;
{

close F;

在你的while()循环中关闭你的文件句柄,即在你的第一行之后?我怀疑你需要这样的东西:

while(<F>) {
   # do something
}
close(F);

答案 1 :(得分:4)

你要做的就是这样,它将在第1个while循环结束时关闭文件句柄 因此你只能获得第一线。因此你需要在文件句柄之外关闭它

open (FH ,'<',"text.txt") or die "can't open";
while(<FH>)
{      
    print $_;
    close FH;
}

试试这个:

open (FH ,'<',"text.txt") or die "can't open";

while(<FH>)
{      
    print $_;
}
close FH;

答案 2 :(得分:0)

您似乎正在尝试使用@ mpapec的答案:Script for a list of data on STDIN returning most common values

您应该将Emails.txt的内容传递给该命令:

perl -ne '
  $s{$_}++ 
}{ 
  print map "$s{$_}: $_",
   (sort {$s{$b} <=> $s{$a}} keys %s)[0..9]
' Emails.txt

但是,这个答案不适合提取域名。为此,您需要将第一行替换为:

$s{(split /@/)[1]}++