Perl 如何在每行末尾添加字母表,并在下一行增加字母表,依此类推

Perl 如何在每行末尾添加字母表,并在下一行增加字母表,依此类推,perl,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) {

我的代码如下:

#!/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"; 
          }
      }
#/usr/local/bin/perl
使用警告;
严格使用;
my$inputfile=“file1.txt”;
打开FH,$inputfile;
我的@results=;
关闭FH;
打印“\n------类型n------\n”;
foreach my$行(@results){
如果($line=~m/(^Mgn\d\.qna.*)/i)
{
打印“$1\n”;
}
}
打印“\n------类型p------\n”;
foreach my$行(@results){
如果($line=~m/(^Mgp\d\.qpa.*)/i)
打印“$1\n”;
}
}
输出:来自上述脚本

---------n型--------------

Mg1.qna无vss n 0.36 0.03 mult=4 $$UNI

Mg3.qna无vss n 0.36 0.03 mult=8 $$UNI

Mg5.qna无vss n 0.36 0.03 mult=6 $$UNI

Mg7.qna无vss n 0.36 0.03 mult=4 $$UNI

Mg9.qna无vss n 0.36 0.03 mult=34$$UNI

---------p型--------------

Mg2.qpa o a vcc vcc p 0.36 0.03 mult=6 $$UNI

Mg4.qpa o a vcc vcc p 0.36 0.03 mult=4 $$UNI

Mg6.qpa o a vcc vcc p 0.36 0.03 mult=8 $$UNI

Mg8.qpa o a vcc vcc p 0.36 0.03 mult=34$$UNI

我需要如下输出

---------n型--------------

Mg1.qna无vss n 0.36 0.03 mult=4 $$UNI a

Mg3.qna无vss n 0.36 0.03 mult=8 $$UNI b

Mg5.qna无vss n 0.36 0.03 mult=6 $$UNI c

Mg7.qna无vss n 0.36 0.03 mult=4 $$UNI d

Mg9.qna无vss n 0.36 0.03 mult=34$$UNI e

---------p型--------------

Mg2.qpa o a vcc vcc p 0.36 0.03 mult=6 $$UNI f

Mg4.qpa o a vcc vcc p 0.36 0.03 mult=4 $$UNI g

Mg6.qpa o a vcc vcc p 0.36 0.03 mult=8 $$UNI h

Mg8.qpa o a vcc vcc p 0.36 0.03 mult=34$$UNI i


<>这并不能解决你可能需要考虑的所有问题,但是这里有一个不同的方法来考虑你的脚本:

my @regexes = (
    qr/(...)/,
    qr/(...)/,
);

for my $r (@regexes){
    my $letter = 'a';
    my @matches = map { $_ =~ $r ? $1 : () } @results;
    print join(' ', $_, $letter ++), "\n" for @matches;
}

让代码编译。解决了你的问题。介绍了一些现代Perl习惯用法

#!/usr/bin/env perl

use warnings;
use strict;

my $inputfile = 'file1.txt';

open my $infh, '<', $inputfile or die "Can't open $inputfile: $!\n";          

my (@type_n, @type_p);

while (<$infh>) {
   push @type_n, $_ if /(^Mgn\d\.qna.*)/i;
   push @type_p, $_ if /(^Mgp\d\.qpa.*)/i;
}

close $infh;

my $chr = 'a';

print "\n---------type n--------------\n" ;
foreach (@type_n) {
  print "$_ " . $chr++ . "\n";  
}

print "\n---------type p--------------\n" ;
foreach (@type_p) {
  print "$_ " . $chr++ . "\n";  
}
#/usr/bin/env perl
使用警告;
严格使用;
my$inputfile='file1.txt';

打开我的$infh,“你可以使用类似的东西

bash-3.2$ cat /tmp/$$
Mg1.qna o a vss vss n 0.36 0.03 mult=4 $$UNI
Mg3.qna o a vss vss n 0.36 0.03 mult=8 $$UNI
Mg5.qna o a vss vss n 0.36 0.03 mult=6 $$UNI
Mg7.qna o a vss vss n 0.36 0.03 mult=4 $$UNI
Mg9.qna o a vss vss n 0.36 0.03 mult=34 $$UNI
Mg2.qpa o a vcc vcc p 0.36 0.03 mult=6 $$UNI
Mg4.qpa o a vcc vcc p 0.36 0.03 mult=4 $$UNI
Mg6.qpa o a vcc vcc p 0.36 0.03 mult=8 $$UNI
Mg8.qpa o a vcc vcc p 0.36 0.03 mult=34 $$UNI

bash-3.2$ perl -lne 'BEGIN{$val=a} print "$_", " $val"; ++$val'  /tmp/$$
Mg1.qna o a vss vss n 0.36 0.03 mult=4 $$UNI a
Mg3.qna o a vss vss n 0.36 0.03 mult=8 $$UNI b
Mg5.qna o a vss vss n 0.36 0.03 mult=6 $$UNI c
Mg7.qna o a vss vss n 0.36 0.03 mult=4 $$UNI d
Mg9.qna o a vss vss n 0.36 0.03 mult=34 $$UNI e
Mg2.qpa o a vcc vcc p 0.36 0.03 mult=6 $$UNI f
Mg4.qpa o a vcc vcc p 0.36 0.03 mult=4 $$UNI g
Mg6.qpa o a vcc vcc p 0.36 0.03 mult=8 $$UNI h
Mg8.qpa o a vcc vcc p 0.36 0.03 mult=34 $$UNI i

请格式化这篇文章(),如果你发布的代码确实可以编译,那就太好了。如果您希望我们帮助您,那么请帮助我们帮助您;打印$x++1。。26'
bash-3.2$ cat /tmp/$$
Mg1.qna o a vss vss n 0.36 0.03 mult=4 $$UNI
Mg3.qna o a vss vss n 0.36 0.03 mult=8 $$UNI
Mg5.qna o a vss vss n 0.36 0.03 mult=6 $$UNI
Mg7.qna o a vss vss n 0.36 0.03 mult=4 $$UNI
Mg9.qna o a vss vss n 0.36 0.03 mult=34 $$UNI
Mg2.qpa o a vcc vcc p 0.36 0.03 mult=6 $$UNI
Mg4.qpa o a vcc vcc p 0.36 0.03 mult=4 $$UNI
Mg6.qpa o a vcc vcc p 0.36 0.03 mult=8 $$UNI
Mg8.qpa o a vcc vcc p 0.36 0.03 mult=34 $$UNI

bash-3.2$ perl -lne 'BEGIN{$val=a} print "$_", " $val"; ++$val'  /tmp/$$
Mg1.qna o a vss vss n 0.36 0.03 mult=4 $$UNI a
Mg3.qna o a vss vss n 0.36 0.03 mult=8 $$UNI b
Mg5.qna o a vss vss n 0.36 0.03 mult=6 $$UNI c
Mg7.qna o a vss vss n 0.36 0.03 mult=4 $$UNI d
Mg9.qna o a vss vss n 0.36 0.03 mult=34 $$UNI e
Mg2.qpa o a vcc vcc p 0.36 0.03 mult=6 $$UNI f
Mg4.qpa o a vcc vcc p 0.36 0.03 mult=4 $$UNI g
Mg6.qpa o a vcc vcc p 0.36 0.03 mult=8 $$UNI h
Mg8.qpa o a vcc vcc p 0.36 0.03 mult=34 $$UNI i