如何从文件中提取多行并将其分开

时间:2011-06-20 07:01:09

标签: perl

我的代码如下:

#!/usr/local/bin/perl

use warnings;    
use strict;

my $inputfile = "file1.txt"; 

open FH,$inputfile;          
my @results = <FH>;   
close FH;           

print "\n---------type n--------------\n" ;

foreach my $line (@results) { 
    if ($line =~ m/(^Mgn\d\.qna.*)/i)            
    {
        print "$1\n";  
    }    
}

print "\n---------type p--------------\n" ;

foreach my $line (@results) {
   if ($line =~ m/(^Mgp\d\.qpa.*)/i)     
       print "$1\n"; 
   }
}

以下代码打印从Mg1.qna开始的行.....现在我要在每行的末尾添加一个字母作为a,b,c,......有人可以启发我此

2 个答案:

答案 0 :(得分:0)

我做了一些改变:

  • 我添加了chomp以删除每行末尾的\n字符。它可能没有任何区别,但它可以。请记住,当您读入输入时,它可能包含最后的\n字符。
  • 我添加了$code++;

关于Perl的一个好处是,自动递增功能非常聪明。您尝试使用其中的字母自动递增,Perl假定您要按字母顺序更新它。

因此,我只需将$n_code$p_code设置为“a”,然后让Perl处理递增。

你不太清楚你在寻找什么,所以我希望这就是你的意思。

下次,包括一些示例输入和输出。每行六打都会非常有用。

#!/usr/local/bin/perl

use warnings;    
use strict;

my $inputfile = "file1.txt"; 

open FH,$inputfile;          
my @results = <FH>;   
close FH;           

print "\n---------type n--------------\n" ;

my $n_code = "$a";
foreach my $line (@results) {
    chomp $line;  # Remove possible NL
    if ($line =~ m/(^Mgn\d\.qna.*)/i)            
    {
        print "$1 $n_code\n";
        $n_code++;   #Increment code to next alphabet character
    }    
}

print "\n---------type p--------------\n" ;

my $p_code = a;
foreach my $line (@results) {
   chomp $line;   #Remove possible NL
   if ($line =~ m/(^Mgp\d\.qpa.*)/i)     
       print "$1 $p_code\n";
       $p_code++;    #Increment code to next letter of alphabet
   }
}

答案 1 :(得分:0)

像这样???

my @type_p;
my $l='a'; # ++ op will increment it
print "\n---------type n--------------\n" ;

foreach my $line (@results) { 
    if ($line =~ m/(^Mgn\d\.qna.*)/i) {
        print $1.($l++)."\n";  
    } elsif ($line =~ m/(^Mgp\d\.qpa.*)/i) { #avoid the 2nd foreach loop
       push @type_p,$1; 
    }

}

print "\n---------type p--------------\n" ;
#$l='a'; #reset counter
print $_.($l++)."\n" for (@type_p);