perl为每一行加一个title

发布时间:2020-09-24编辑:脚本学堂
perl为每一行加一个title,可以用perl命令行,也可以用非perl命令行的方法解决。

perl为每一行加一个title

数据:
<HUGOGeneSymbol>BSG</HUGOGeneSymbol>
 <Genealias>basigin isoformiv</GeneAlias>
 <GeneAlias>basigin isoform 2</GeneAlias>
 <GeneAlias>basigin isoform-2</GeneAlias>
<HUGOGeneSymbol>ATP6AP1</HUGOGeneSymbol>
 <GeneAlias>ac 45</GeneAlias>
 <GeneAlias>vatps-i</GeneAlias>
 <GeneAlias>xapiii</GeneAlias>              
<HUGOGeneSymbol>FADD</HUGOGeneSymbol>
 <GeneAlias>mort-1</GeneAlias>
 <GeneAlias>mort i</GeneAlias>
 <GeneAlias>gig iii</GeneAlias>
              
把上面的数据转化为以下形式,就是每个<GeneAlias>行的前面都加上一列它上面的<HUGOGeneSymbol>行,形如以下形式:
<HUGOGeneSymbol>BSG</HUGOGeneSymbol>  <GeneAlias>basigin isoformiv</GeneAlias>
<HUGOGeneSymbol>BSG</HUGOGeneSymbol>  <GeneAlias>basigin isoform 2</GeneAlias>
<HUGOGeneSymbol>BSG</HUGOGeneSymbol>  <GeneAlias>basigin isoform-2</GeneAlias>

<HUGOGeneSymbol>ATP6AP1</HUGOGeneSymbol> <GeneAlias>ac 45</GeneAlias>
<HUGOGeneSymbol>ATP6AP1</HUGOGeneSymbol> <GeneAlias>vatps-i</GeneAlias>
<HUGOGeneSymbol>ATP6AP1</HUGOGeneSymbol> <GeneAlias>xapiii</GeneAlias>      

解决方法有两种,命令行与非命令行。
命令行:
 

复制代码 代码如下:
perl -ne '
chomp ($a = $_) if /^<H/;
print $a, $_ if s/^s*// && /^<G/;'

非命令行:
 

复制代码 代码如下:

while(<INFILE>){
 
          if(/<HUGOGeneSymbol>/){
               chomp($key=$_);  
          }
         
          print "$keyt$_" if/<GeneAlias>/;
        
}

exit;