perl一次读取多行并按条件输出的实例教程,有需要的朋友参考下。
perl中通常是每次读取一行,例如:
open(H,“a.txt”)
while($line=<H>)
{ }
例如:
open(INFILE, "E:/hebing_5.txt");
open(OUTFILE, ">E:/alignment_5.txt")|| die "Cannot open the newfile: $!n";
while (<INFILE>) {
if (!/*/){
print OUTFILE "$_";}
}
exit;
如果想用perl每次读取文件的多行,可以采用下面的方法;例如:
#!/usr/bin/perl
use warnings;
use strict;
open (TEST, "<E:/alignment_1.txt");
open(OUTFILE, ">E:/123.txt")|| die "Cannot open the newfile: $!n";
while (<TEST>) {
if(index ($_, "=") > -1){
my $position=tell(TEST);
my $keyword_line=$_;
my $line_1=<TEST>;
my $line_2=<TEST>;
# @a=split//,$keyword_line; 比较它们的元素是否相等,一直没成功
# @b=split//,$line_1; 利用if ($a[0]eq $a[0])来判断
# @c=split//,$line_2;
if (($line_2)&&(index($line_2, "=")>-1)){ # 或者if ($line_2=~/=/)
print OUTFILE "$_$line_1";
}
if (!($line_2)) { print OUTFILE "$_$line_1"; last; }
seek(TEST, $position, 0);
}
}
close (TEST);
exit;
以上的例子,每次按条件读入三行,并且按照条件输出两行。
以下命令主要解决了如下的问题:
在一个文件中,首字符为Query=的行下面是一行首字符为Sbjct:的行,如果Query=的行下面有多行Sbjct:的行,则这样的Query=行和Sbjct: 行全部去掉,也就是在输出文件中不输出。
Query= SNP169 Query: 1 ttgtcatagtatatacaaagtaaccgatccattcactcaaa 41
Sbjct: 1449137 ttgtcatagtatatacaaagtaaccgatccattcactcaaa 1449097
Query= SNP170 Query: 1 tgatttaataatattaagggctcggtaatccaaatcatcta 41
Sbjct: 1448134 tgatttaataatattaagggctcggtaatccaaatcatcta 1448094
Query= SNP171 Query: 1 attgagattcacttgcctagaccggatccttattcggactc 41
Sbjct: 1447804 attgagattcacttgcctagaccggatccttattcggactc 1447764
Query= SNP173 Query: 1 gactgtgtatccacctagcatcgaacaaatggataaacatt 41
Sbjct: 1443270 gactgtgtatccacctagcatcgaacaaatggataaacatt 1443230
Query: 1 gactgtgtatccacctagcatcgaacaaatggataaacatt 41
Sbjct: 16461763 gactgtgtatccacctagcaccgaacaaatggatatacatt 16461803
Query: 1 gactgtgtatccacctagcatcgaacaaatggataaacatt 41
Sbjct: 15766602 gactgtgtatccacctagcaccgaacaaatggatatacatt 15766562
Query= SNP174 Query: 1 aagttgtgattcttgcatcatcatgacactctttttcattc 41
Sbjct: 1442959 aagttgtgattcttgcatcatcatgacactctttttcattc 1442919
Query: 1 aagttgtgattcttgcatcatcatgacactctttttcattc 41
Sbjct: 13904658 aagttgtgattcttgcatcaccatgacactctttttcattc 13904618
Query: 1 aagttgtgattcttgcatcatcatgacactctttttcattc 41
Sbjct: 12731873 aagttgtgattcttgcatcaccatgacactctttttcattc 12731913
Query= SNP175 Query: 1 aaattgatgaacgctctacatatgaatcatttgtgttcaag 41
Sbjct: 1442912 aaattgatgaacgctctacatatgaatcatttgtgttcaag 1442872
Query: 1 aaattgatgaacgctctacatatgaatcatttgtgttcaag 41
Sbjct: 13904611 aaattgatgaaagctctacacatgaatcatttgtgttcaag 13904571
Query: 1 aaattgatgaacgctctacatatgaatcatttgtgttcaag 41
Sbjct: 12731920 aaattgatgaaagctctacacatgaatcatttgtgttcaag 12731960
Query= SNP176 Query: 1 ttccgcgacgattcgaactcgtgcccttgggatttcactgc 41
Sbjct: 1436960 ttccgcgacgattcgaactcgtgcccttgggatttcactgc 1436920
结果如下:
Query= SNP169 Query: 1 ttgtcatagtatatacaaagtaaccgatccattcactcaaa 41
Sbjct: 1449137 ttgtcatagtatatacaaagtaaccgatccattcactcaaa 1449097
Query= SNP170 Query: 1 tgatttaataatattaagggctcggtaatccaaatcatcta 41
Sbjct: 1448134 tgatttaataatattaagggctcggtaatccaaatcatcta 1448094
Query= SNP171 Query: 1 attgagattcacttgcctagaccggatccttattcggactc 41
Sbjct: 1447804 attgagattcacttgcctagaccggatccttattcggactc 1447764
Query= SNP176 Query: 1 ttccgcgacgattcgaactcgtgcccttgggatttcactgc 41
Sbjct: 1436960 ttccgcgacgattcgaactcgtgcccttgggatttcactgc 1436920
或使用如下程序-------
每次输入四行,如果第二行不含N,那么则输出这四行:
#!/usr/bin/perl
use warnings;
use strict;
open(INFILE, "/home/liuguiyou/1.fastq");
open(OUTFILE, ">/home/liuguiyou/1_no_N.fastq")|| die "Cannot open the newfile: $!n";
while (<INFILE>) {
if(/^@d+:d+:d+:/){
my $position=tell(INFILE);
my $keyword_line=$_;
my $line_1=<INFILE>;
my $line_2=<INFILE>;
my $line_3=<INFILE>;
my @a=split//,$line_1;
my $b=join" ",@a;
if (($b)&&!($b=~/N/)){
print OUTFILE "$keyword_line$line_1$line_2$line_3";
}
seek(INFILE, $position, 0);
}
}
close (INFILE);
exit;
输入数据:
@4:1:1:819:N
CAATACTCATAAAAACACNNNNNNNNNNNNNNNNNNNN
+
######################################
@4:1:2:826:N
CAAAAGAAAATACGAAGCNNNNNNNNNNNNNNNANNNN
+
######################################
@4:1:2:873:N
CTGAAAGAGACCCTACCANNNNNNNNNNNNANNANNNN
+
######################################
@4:1:2:1545:N
CCCGCACCTACATCATAANNNNNNNNNNNNANNTNCNN
+
######################################
@4:1:2:1:N
AAAAAAAAAAAAAAAAAANNANNNNNNANNANNAAANN
+
@@<9<999<@<###########################
@4:1:3:1540:N
CAGCAGCACGACATTAATGCTCTCACACTTANTCCCNC
+
######################################
@4:1:3:1393:N
GCATCTCGTGCACACACGCACCGTTACGTAANCACACA
+
######################################
@4:1:3:1366:Y
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+
@@<@<<@@@<@=<<@<@@<;<@@<;@;@;@@#######
@4:1:3:1386:N
ACCAACACACCCAAATCTGCAACCCATACTACCACACC
+
######################################
输出文件:
@4:1:3:1366:Y
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+
@@<@<<@@@<@=<<@<@@<;<@@<;@;@;@@#######
@4:1:3:1386:N
ACCAACACACCCAAATCTGCAACCCATACTACCACACC
+
######################################