perl 和 shell隨記

1、~ /^\"(.*)\"\s+\<(\d+)-?(\d*)\>\s*$/ perl模式匹配

^\"以”開頭,(.*)任意個字符,\"匹配”,\s+匹配一個以上的空白符,\<匹配一個<,(\d+)匹配一個以上的數字,-?匹配連字符-零次或一次,(\d*)匹配0或零個以上的數字,\>匹配>,\s*$/以0至0個以上的空白符結尾

 

2、一般來說,while循環中使用<STDIN><>讀取輸入後(也包括open關鍵字打開文件再讀取行的情況),第一行就是去除行尾的換行符,所以大多數都採用如下通用格式:

while(<>){
    chomp;
    COMMANDS;
}
 
while(<STDIN>){
    chomp;
    COMMANDS;
}

 

3、chomp()

讀取fasta文件,內容如下:

1

2

3

4

5

6

>1

ATGCTAGCTACGTACGTACGTTTTTTTTT

>2

ACGATCGACGATCGTACGTACGTACGATT

>3

ATGCATGCTATACATCAGCTAATATCGCT

#!/usr/bin/perl 
use warnings;
use strict;

my ($fasta) = @ARGV;

open FASTA, $fasta or die "Can't open $fasta";
local $/ = ">";
while (<FASTA>) {
    s/\n//g;
    print qq{$_\n};
}
close $fasta;
$/ = "\n";

運行這段代碼,輸出結果如下:

1

2

3

4

>

1ATGCTAGCTACGTACGTACGTTTTTTTTT>

2ACGATCGACGATCGTACGTACGTACGATT>

3ATGCATGCTATACATCAGCTAATATCGCT

 

可以看出,$/的值出現在每行的最後;接下來使用chomp函數

#!/usr/bin/perl 
use warnings;
use strict;

my ($fasta) = @ARGV;

open FASTA, $fasta or die "Can't open $fasta";
local $/ = ">";
while (<FASTA>) {
    chomp;
    s/\n//g;
    print qq{$_\n};
}
close $fasta;
$/ = "\n";

輸出結果爲:

1

2

3

1ATGCTAGCTACGTACGTACGTTTTTTTTT

2ACGATCGACGATCGTACGTACGTACGATT

3ATGCATGCTATACATCAGCTAATATCGCT  

第一行因爲是空行,這裏沒顯示出來;可以看到每行末尾的>符號被去除了,所以chomp的真正作用是去除字符串末尾的$/,只是因爲默認情況下,$/爲\n,造成chomp就是去除\n的假象;

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章