perl 提取介于某个区间的几行文字(转)

来源:互联网 发布:java缓存技术怎么实现 编辑:程序博客网 时间:2024/04/28 15:24
 

提取介于某个区间的几行文字


flw原话:


这是面向行处理的一种轻量级解决方法。
比那些对整个文件进行模式匹配的方法不知优雅了要多少倍。

$start 表示开始标记的模式,$end 表示结束标记的模式,
if ( (/$start/ .. /$end/) and !/$end/ ){
表示需要开始和结束之间的,但不需要结束的那一行。

#!/usr/bin/perl

use warnings;
use strict;

open (INFILE,"/home/liuguiyou/qujian.txt") or die "Cannot open the inputfile: $!/n";
open (OUTFILE,">/home/liuguiyou/result.txt")or die "Cannot open the outputfile: $!/n";

while(<INFILE>){
if(/>chromosome01/../>chromosome02/ and !/>chromosome02/ ){
      print OUTFILE "$_";
                                    }

                }

exit;

[liuguiyou@localhost ~]$ more  qujian.txt
>chromosome01 Indica cv. 93-11
CTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAA
CCCTAAACCCTAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACAGCT
GACAGTACGATAGATCCACGCGAGAGGAACCGGAGAGACAACGGGATCCAGGCGCCAGCG
>chromosome02 Indica cv. 93-11
CTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAA
CCCTAAACCCTAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACAGCT
GACAGTACGATAGATCCACGCGAGAGGAACCGGAGAGACAACGGGATCCAGGCGCCAGCG
>chromosome03 Indica cv. 93-11

运行完以后:



>chromosome01 Indica cv. 93-11

CTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAA

CCCTAAACCCTAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACAGCT

GACAGTACGATAGATCCACGCGAGAGGAACCGGAGAGACAACGGGATCCAGGCGCCAGCG