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的目的是逐个转换列表中的元素,并产生一个新的列表作为结果,而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来实现:
注意到()是不返回任何东西。