一些perl的小技巧

劉小澤寫(xiě)于18.12.2

這個(gè)周末做了不少事豹悬,參加了P4 China精準(zhǔn)醫(yī)療會(huì)議玄括,第一次參加這種國(guó)際性會(huì)議卒茬,長(zhǎng)了不少見(jiàn)識(shí),同時(shí)帶回來(lái)很厚一摞“背景知識(shí)” 來(lái)學(xué)習(xí)(各個(gè)公司的手冊(cè)酥筝,這個(gè)詞是和jimmy學(xué)的??滚躯,學(xué)無(wú)止境,學(xué)無(wú)止境)嘿歌;
周六下午參加了生信技能樹(shù)舉辦的小party掸掏,認(rèn)識(shí)了一幫志同道合的小伙伴,還有當(dāng)時(shí)學(xué)習(xí)轉(zhuǎn)錄組時(shí)默默關(guān)注的“青山屋主”老師搅幅≡氖可能大家做的方向不同呼胚,但是能感受到那份共同對(duì)于生信的熱情和相互學(xué)習(xí)的動(dòng)力茄唐;另外從熊那里學(xué)到了新的Evernote知識(shí)管理體系LTF(List,Tag蝇更,F(xiàn)ilter)沪编,不愧是印象筆記中國(guó)區(qū)大使,之前也在用evernote年扩,但是沒(méi)有利用好tag蚁廓,這次周日用了一天更新了自己的知識(shí)庫(kù)tag,希望日后用的越來(lái)越6吧

18.12.1充實(shí)的周末

今天看一下關(guān)于perl的一些小知識(shí)

基本知識(shí)

  • 標(biāo)量$厨幻、數(shù)組@相嵌、哈希%【分別用小括號(hào)腿时、中括號(hào)、大括號(hào)取元素】
  • perl語(yǔ)句都以分號(hào)結(jié)尾
  • 賦值是從右到左
  • 文本用單引號(hào)或者雙引號(hào)
  • 單引號(hào)把其中所有變?yōu)槲谋痉贡觯浑p引號(hào)可以用轉(zhuǎn)義符
  • 列表用小括號(hào)批糟,其中元素逗號(hào)分隔
  • perl從0開(kāi)始計(jì)數(shù)

perl運(yùn)算符

# 基本數(shù)學(xué)運(yùn)算
print 3 * (5 + 10) - 2**4;  

# 變量運(yùn)算
$total_error = $false_positive + $false_negative;  

# 增加固定數(shù)值
$minutes += 30;      

# 每次加一
$hour++;              

# 每次減一
$remaining--;    

# 重復(fù)多少次
$motif = 'CG' x 12;  

# 連接字符串和變量?jī)?nèi)容
$chr = 'chr' . $roman{$chr_number};   

# 從小到大
@hex = (1..9, a..f);  

perl函數(shù)

# 標(biāo)量函數(shù)
$seq_len = length($seq);
$rev_seq = reverse($seq);
$upper_case = uc($seq);
$lower_case = lc($seq);
$codon = substr $seq, 0, 3;

# 去掉結(jié)尾空白
chomp $input_line;            

# 數(shù)組函數(shù)
@array = split //, $string;
$first_element = shift @array; 
$last_element = pop @array;
unshift @array, $first_element;
push @array, $last_element;
@alphabetically_sorted = sort @names;
@numerically_sorted = sort { $a <=> $b } @values;

# 哈希函數(shù)
if (defined $description{$gene}) { print $description{$gene} } else { print 'not available'; }
foreach (keys %headers) { print ">$_\n$headers{$_}\n"; }

循環(huán)、判斷

 '>', '<', '==' 或者'gt', 'lt', 'eq' 
 # 準(zhǔn)確查找motif
if (substr($seq, $pos, 10) eq $motif) { print "Motif found at position $pos!\n"; }

# 每一行都變成小寫(xiě)字母再合并
while (<>) { chomp; $seq .= lc $_; }

正則表達(dá)

/中展示看铆,通過(guò)=~應(yīng)用徽鼎,再加上限定(i表示大小寫(xiě)區(qū)分;g表示全局比對(duì))

特殊字符比如:字母用'\w'弹惦,數(shù)字用'\d'否淤,空格用'\s'【反選用'\D', '\W','\S'

出現(xiàn)次數(shù)出現(xiàn)在大括號(hào)中棠隐,如:'{3}'即3次石抡;'{4,10}'4到10次;'{2,}'兩次以上

'+'比對(duì)至少一個(gè)助泽;'*' 0個(gè)或多個(gè)汁雷;'?' 0個(gè)或1個(gè)

# search $_ for the word regulator (ignoring case) and print if found
if (/regulator/i) { print;}

# 找非數(shù)字字符
if ($input =~ /\D/) { warn "Non-numerical input in '$input'\n"; }

# 移除所有空格
$input =~ s/\s//g;

# CG至少出現(xiàn)3次
if ($input =~ /(CG{3,})/) { print "Found pattern $1!\n"; }

# 將字符串按tab分隔,然后整合到數(shù)組
@list = split /\t/, $input;

單行perl

與One-Liner相關(guān)的perl參數(shù)

-a 自動(dòng)分隔模式
-F 指定-a的分隔符
-l 對(duì)輸入的內(nèi)容進(jìn)行自動(dòng)chomp报咳,對(duì)輸出的內(nèi)容自動(dòng)加換行符
-n 相當(dāng)于while(<>)
-e 執(zhí)行命令侠讯,也就是腳本
-p 自動(dòng)循環(huán)+輸出,也就是while(<>){命令(腳本); print;}

perl -e 必須要寫(xiě)
perl -pe 讀取每行=》處理=〉輸出 ex. perl -pe 's/aaa/AAA/g' 1.txt
perl -ln 效果等于 while(<>){chomp;}
perl -alne 處理tab分割文件 如 perl -alne 'print $F[0]'
perl -ne '/regex/ && print' 打印匹配的行

perl -ne 'print if /foo/' acts a lot like grep foo, 
perl -pe 's/foo/bar/' replaces foo with bar
perl -lpe 's/\s*$//'

幾個(gè)小例子

perl -e 'print "hello world\n"' #結(jié)果加換行符
perl -l -e 'print 2**13' #結(jié)果輸出到新行
perl -lne '$i++; $in += length($_); END { print "$i lines, $in characters"; }' input.txt #讀取文件并統(tǒng)計(jì)行數(shù)與字符數(shù)
perl -lne '$i++; $in += length($_); $w += scalar split /\s+/, $_; END { print "$i lines, $w words, $in characters"; }' input.txt # 增加統(tǒng)計(jì)單詞數(shù)
perl -le 'foreach (1..100) { print rand;}' > random_numbers.txt #1-100取隨機(jī)數(shù)并輸出到文件

# 對(duì)于逗號(hào)分隔的文件暑刃,將最后一列提到第一列
perl -F, -lane 'print(join ",", @F[-1,0..$#F-1])' 

# 空格分隔的文件厢漩,將第三列降序排列
perl -lane '$s{$F[2]} .= $_; END {foreach (sort { $b <=> $a } kyes %s) {print $s{$_}; }}'

# 改變基因坐標(biāo),確保起始位點(diǎn)始終小與終止位點(diǎn)
perl -lane '($F[3],$F[2]) = ($F[2], $F[3]) if ($F[3] lt $F[2]); print (join "\t", @F);' input

歡迎關(guān)注我們的公眾號(hào)~_~  
我們是兩個(gè)農(nóng)轉(zhuǎn)生信的小碩岩臣,打造生信星球溜嗜,想讓它成為一個(gè)不拽術(shù)語(yǔ)、通俗易懂的生信知識(shí)平臺(tái)架谎。需要幫助或提出意見(jiàn)請(qǐng)后臺(tái)留言或發(fā)送郵件到Bioplanet520@outlook.com

Welcome to our bioinfoplanet!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炸宵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谷扣,更是在濱河造成了極大的恐慌土全,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件会涎,死亡現(xiàn)場(chǎng)離奇詭異裹匙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)末秃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)概页,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人练慕,你說(shuō)我怎么就攤上這事惰匙〖继停” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵项鬼,是天一觀的道長(zhǎng)零截。 經(jīng)常有香客問(wèn)我,道長(zhǎng)秃臣,這世上最難降的妖魔是什么涧衙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮奥此,結(jié)果婚禮上弧哎,老公的妹妹穿的比我還像新娘。我一直安慰自己稚虎,他們只是感情好撤嫩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蠢终,像睡著了一般序攘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寻拂,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天程奠,我揣著相機(jī)與錄音,去河邊找鬼祭钉。 笑死瞄沙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的慌核。 我是一名探鬼主播距境,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垮卓!你這毒婦竟也來(lái)了垫桂?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤粟按,失蹤者是張志新(化名)和其女友劉穎诬滩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體钾怔,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碱呼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蒙挑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宗侦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忆蚀,死狀恐怖矾利,靈堂內(nèi)的尸體忽然破棺而出姑裂,到底是詐尸還是另有隱情,我是刑警寧澤男旗,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布舶斧,位于F島的核電站,受9級(jí)特大地震影響察皇,放射性物質(zhì)發(fā)生泄漏茴厉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一什荣、第九天 我趴在偏房一處隱蔽的房頂上張望矾缓。 院中可真熱鬧,春花似錦稻爬、人聲如沸嗜闻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)琉雳。三九已至,卻和暖如春友瘤,著一層夾襖步出監(jiān)牢的瞬間翠肘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工辫秧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锯茄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓茶没,卻偏偏與公主長(zhǎng)得像肌幽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抓半,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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

  • 標(biāo)題: Rakudo and NQP Internals子標(biāo)題: The guts tormented imple...
    焉知非魚(yú)閱讀 1,342評(píng)論 1 3
  • 一喂急、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,720評(píng)論 0 10
  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,118評(píng)論 0 13
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理笛求,服務(wù)發(fā)現(xiàn)廊移,斷路器,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 那天得知到澳門(mén)出差的時(shí)候心裡其實(shí)不抱有太多期待探入,畢竟是出差狡孔,沒(méi)想到玩的事,原先也打算當(dāng)天馬上返程的蜂嗽。後來(lái)是南提醒了...
    IceyPeng閱讀 416評(píng)論 0 0