生信星球培训第四十八期

Day4--perl上了RStudio的船

2020-03-30  本文已影响0人  东方不赞

RStudio有个terminal,可用Shift+Alt+R新建一个terminal,可在RStudio上创建一个.pl文件

#在ubuntu终端的命令行下
##或在我自己的Rstudio-server上的terminal下
pwd #此时的位置为/home/**
#去D盘
cd /mnt/d/
#回来
cd

话不多说,接着今天的Perl

@ARGV

# 命令行
##perl $0 $ARGV[1] $ARGV[2]
#如
perl 123.pl human.fa save.fa

输入输出

open IN,"<$ARGV[0]";  #输入
open OU,">$ARGV[1]"; #覆盖输出
# open OU,">>$ARGV[1]"; #追加输出

print OU "hello\n";

close IN
close OU

句柄

IN
OU
STDIN
STDOUT
STDERR
DATA
ARGV
ARGVOUT

<IN>介于输入和输出之间,用于摆渡,所以用<>表示。
一次装载一行数据

#!/usr/bin/perl -w
open IN,"<ARGV[0]", or die "error!!!!!!!!!!!!!";
while(<IN>){
  chomp;
  @line=split /\s+/,$_[1];
  print "@line\n";
}
close IN;
$/="\n" #默认的字段分隔符
$/=">" #读取一段FASTA  

哈希

哈希hash名字怪怪的,但是挺有用,可以根据key来提取value,而不用担心顺序。就好比于在手机上查单词(key),提取出单词的释义(value)。

#定义空hash
%hash=();
$hash{"key1"}=value1

#hash赋值
%hash=("key1",value1,"key2",value2,"key3",value3)
#or:
%hash=(
    "key1"=>value1,
    "key2"=>value2,
    -key3=>value3,
    key=>value444
    );
    
#删除
delete $hash{"key1"}
$hash{"key1"};
@keys=keys %hash;
@values=values %hash;
if (exist $hash{"key1"}){
    print "$hash{\"key1\"}\n";
}
#也可先排序一下sort keys %hash;
foreach(keys %hash){
    print "$_\n";
    print "$hash{$_}\n";
}
#or:
while(($keys,$values)=each %hash){
    print "$keys\n$values\n";
}

小应用:序列提取

已知一堆id,存入A,根据参考基因组B(FASTA格式)的id,提取A中id的序列。

#!/usr/bin/perl -w
%query_a=();

#提取A的id
open <IN>,"<ARGV[0]";
while (<IN>){
    chomp;
    @query_a{$_}=1;
}
close IN;

#比较B与A,存B序列到%query_A的value
open FA,"<$ARGV[1]";
open OU,">>save.fa";
$/=">";
#将第一行的>的前面的空值过滤掉
<FA>; 
while(<FA>){
    chomp;
    $id_seq=(split /\n/,$_,2);#分成两份,为ID和序列
    if(exist $query_a{$id_seq[0]}){
        $query_a{$id_seq}=$id_seq[1];
        print OU ">$id_seq[0]\n";
        print OU "$id_seq[1]\n";    
    }else{
        next;
    }
}
close FA;

#输出A中那些没匹配到的
@keys=keys @query_a;
@values=values @query_a;

foreach $count (@values){
    if ($count==1);
    print "$keys{$count}\n";
}
print "those id above were not found sequence in RefSeq!!\n\n";

上一篇 下一篇

猜你喜欢

热点阅读