perl map和grep的实例教程

发布时间:2020-08-03编辑:脚本学堂
perl map和grep的实例教程,供大家学习参考。

perl下map和grep的实例教程,供大家学习参考。

复制代码 代码如下:

#!/usr/bin/perl
use warnings;
use strict;

my @list;
my @number;

open(INFILE, "/home/liuguiyou/alignment_2.txt");
open(OUTFILE, ">/home/liuguiyou/query.txt") ||   die "Cannot open the newfile: $!n";

while(<INFILE>){
chomp;
@list=split;
@number=grep(/Query/, @list);

print OUTFILE "@numbern"; # or print OUTFILE "$_n";
               }
exit;

output:
Query=SNP1 Query:
Query=SNP2 Query:
Query=SNP3 Query:
Query=SNP4 Query:
Query=SNP5 Query:
Query=SNP6 Query:
Query=SNP7 Query:
Query=SNP8 Query:
Query=SNP9 Query:
Query=SNP10 Query:

or print OUTFILE "$_n"; output:
Query=SNP1  Query: 1     aattttggtggcagagatgg-tagtggttgctcagaaaacca 41
Query=SNP2  Query: 1     aaaaagaaacagaaatggttgtactagtgagaaagaagaaa 41
Query=SNP3  Query: 1     cacctactcccaccaccaaaaagcctccttctctttaccat 41
Query=SNP4  Query: 1     tttggcaattcttttacaagcccttggtcctgttttctcca 41
Query=SNP5  Query: 1      gaaaacgcatacgccatcctgattaaccaaacacacatatg 41
Query=SNP6  Query: 1      tatacaaaaaatttgatacatttttgataaacacattttga 41
Query=SNP7  Query: 1      tctgatttgaattccattttatcagactctcatccgtgcaa 41
Query=SNP8  Query: 1      gcgacactgagaagagacgatgagggaggtatgtgactata 41
Query=SNP9  Query: 1      aagatcacgaggcagagtttcgccacatgtccttcattgtt 41
Query=SNP10  Query: 1      gtggaaagatgatacagagtagagagatttcttcttcttct 41

map和grep都是列表处理函数,它们将一个列表转换成另一个列表。它们的语法如下:
 

复制代码 代码如下:
map expression_r_r_r_r_r_r_r,LIST;
map BLOCK,LIST;
grep expression_r_r_r_r_r_r_r,LIST;
grep BLOCK,LIST;

map的目的是逐个转换列表中的元素,并产生一个新的列表作为结果,而grep是通过表达式或者程序块被计算为True或False值来返回原始列表的一个子集列表。

下面举例说明map的用法:
 

复制代码 代码如下:

[liuguiyou@localhost ~]$ cat perl/map.pl
#!/usr/bin/perl -w
use strict;

my @numbers=(80,101,114,108);
my @list= map (chr,@numbers);
print @list;
print "n";
;

  [liuguiyou@localhost ~]$ perl perl/map.pl
Perl

下面的用法也可以:
 

复制代码 代码如下:

[root@test doc2sort]# cat map.pl

#!/usr/bin/perl -w
use strict;

my @numbers=(80,101,114,108);
print map {chr $_} @numbers;
print "n";

[root@test doc2sort]# perl map.pl
Perl

当然我们也可以用foreach循环做同样的事,但map做的更简洁些。

grep的用法也是非常的简单:
 

复制代码 代码如下:

[root@test doc2sort]# cat grep.pl
#!/usr/bin/perl -w
use strict;

my @list=(80,101,"hello","world",114,108);
my @number=grep {/^d+/} @list;
print "@numbern";
[root@test doc2sort]# perl grep.pl
80 101 114 108
 

当然我们也可以用map来实现:
 

复制代码 代码如下:
my @number=map {/^d+/?$_:()} @list;
 

注意到()是不返回任何东西。