perl入門(mén)03:文件讀入與輸出

要點(diǎn)一:文件讀寫(xiě)

文件讀寫(xiě)主要使用open函數(shù)逻炊,如下圖使用方法分為三個(gè)部分:

文件讀入

1、文件句柄

  • 可以理解呈擺渡船慢宗,讀取文件數(shù)據(jù)坪蚁,再轉(zhuǎn)移給腳本中的變量。
  • 自己命名婆廊,一般大寫(xiě)字母迅细;如圖例中的IN, OU
  • perl常用默認(rèn)文件句柄
    STDIN, STDOUT, STDERR 分別表示屏幕標(biāo)準(zhǔn)輸入、輸出淘邻、報(bào)錯(cuò)茵典。
    ARGV 表示命令行參數(shù);比如ARGV[0]表示命令行第一個(gè)參數(shù)宾舅;ARGV[1]表示命令行第二個(gè)參數(shù).......

值得注意的是统阿,因?yàn)槭侵鹦?擺渡"的彩倚,所以IN第幾次在腳本中出現(xiàn)就表示文件中的第幾行出現(xiàn)。如果不想使用第一行數(shù)據(jù)扶平,賦值給空變量即可帆离。見(jiàn)本文最后的例子。

2结澄、讀or寫(xiě)

類(lèi)比Linux重定向哥谷;

  • < 表示讀入文件
  • > 表示寫(xiě)入文件
  • >> 表示追加寫(xiě)入文件
  • <> 磚石操作符,一般為將句柄賦值給變量的標(biāo)準(zhǔn)格式
    $first=<IN>; #如果磚石操作符為空麻献,就表示屏幕輸入中(鍵盤(pán)敲)讀取们妥,如下面這個(gè)加法計(jì)算小例子。
#!/usr/bin/perl -w

print "Please enter the first number\n";

chomp ($a=<>);
print "Please enter the second number\n";
chomp ($b=<>);
$c=$a+$b;
print "$a + $b =$c\n";

3勉吻、文件名

為待讀取的文件或者準(zhǔn)備寫(xiě)入的新文件名监婶,一般配合ARGV從參數(shù)中讀取。
常用的標(biāo)準(zhǔn)模式為

open IN,"<$ARGV[0]";   #第一個(gè)參數(shù)設(shè)置讀入的文件
open OU,">$ARGV[1]";  #第二個(gè)參數(shù)設(shè)置寫(xiě)入的文件

4齿桃、優(yōu)雅的補(bǔ)充 or die

考慮到有時(shí)文件無(wú)法打開(kāi)的現(xiàn)象惑惶,可以在結(jié)尾補(bǔ)充說(shuō)明性的報(bào)錯(cuò)信息

open IN,"<$ARGV[0]" or die "can not open the file\n$!";
  • $!為特殊變量短纵,表示報(bào)錯(cuò)信息带污。

此外還有兩個(gè)特殊變量,這里一并介紹踩娘。一個(gè)是$/表示分隔符刮刑,默認(rèn)分隔符為$/="\n"(換行符),可以根據(jù)情況作出修改养渴,比如$/=">"就將分隔符修改為大于號(hào)雷绢,在fasta序列處理中常用;一個(gè)是$_一般為未指明變量時(shí)的默認(rèn)變量理卑,例子見(jiàn)下例翘紊。

5、遍歷文件行

  • 將結(jié)果輸出到屏幕
open IN,"<$ARGV[0]";

while (<IN>) {    #while判斷依據(jù):是否為空字符串
    chomp;     #去掉換行符藐唠;當(dāng)為默認(rèn)變量$_時(shí)可省略 
    print "$_/n";   #輸出結(jié)果到屏幕
}
close IN;  #關(guān)閉句柄
  • 將結(jié)果輸出到指定文件
open IN,"<$ARGV[0]";
open OU,">$ARGV[1]";
while (<IN>) {  
    chomp;    
    print OU "$_/n";   #輸出結(jié)果不會(huì)輸出到屏幕帆疟,而是指定輸出文件中
}
close IN;  #關(guān)閉句柄
close OU;

要點(diǎn)二:實(shí)戰(zhàn)小例子 fastq→fasta

首先要理解兩種文件的區(qū)別---
(1)fastq有四行,第一行開(kāi)頭為@;
(2)fasta只有兩行宇立,第一行開(kāi)頭為>踪宠。
因此要將fastq的三四兩行刪去,同時(shí)將第一行的@更換為>妈嘹。

#!/usr/bin/perl -w

open IN,"<$ARGV[0]";   #為讀入的fastq文件
# open IN,"zcat $ARGV[0] |"  #若為壓縮文件fq.gz的讀入方法
open OU,">$ARGV[1]";   #為寫(xiě)出的fasta文件

while ($id=<IN>) {  
    chomp ($id);  #要加入括號(hào)柳琢,因?yàn)樽兞坎皇悄J(rèn)變量,不可省略
        $id=~ tr /@/>/ ;  #將@替換為>
    chomp ($seq=<IN>);
    <IN>;   #第三行不管,賦值給空變量
    <IN>;   #第四行不管柬脸,賦值給空變量
    print OU "$id\n";
    print OU "$seq\n";
}
close IN;  #關(guān)閉句柄
close OU;
head test.1.fq
test.1.fq
perl -c 1.pl
perl 1.pl test.1.fq my.fa
head my.fa
my.fa
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末他去,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子倒堕,更是在濱河造成了極大的恐慌灾测,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垦巴,死亡現(xiàn)場(chǎng)離奇詭異媳搪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)骤宣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)蛾号,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人涯雅,你說(shuō)我怎么就攤上這事≌乖耍” “怎么了活逆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)拗胜。 經(jīng)常有香客問(wèn)我蔗候,道長(zhǎng),這世上最難降的妖魔是什么埂软? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任锈遥,我火速辦了婚禮,結(jié)果婚禮上勘畔,老公的妹妹穿的比我還像新娘所灸。我一直安慰自己,他們只是感情好炫七,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布爬立。 她就那樣靜靜地躺著,像睡著了一般万哪。 火紅的嫁衣襯著肌膚如雪侠驯。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天奕巍,我揣著相機(jī)與錄音吟策,去河邊找鬼。 笑死的止,一個(gè)胖子當(dāng)著我的面吹牛檩坚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼效床,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼睹酌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起剩檀,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤憋沿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后沪猴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辐啄,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年运嗜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了壶辜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡担租,死狀恐怖砸民,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奋救,我是刑警寧澤岭参,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站尝艘,受9級(jí)特大地震影響演侯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜背亥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一秒际、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狡汉,春花似錦娄徊、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至捻脖,卻和暖如春锐峭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背可婶。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工沿癞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人矛渴。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓椎扬,卻偏偏與公主長(zhǎng)得像惫搏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚕涤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容