Perl programming and perl one line

習(xí)慣了了一些很好的IDE( 比如Matlab 很好的交互界面继阻,VB有很好的圖形化界面示括,還有R 與Rstidio姆怪,現(xiàn)在我基本都用JAVA的Eclipse)溯乒,回過頭來看一下Perl的編程環(huán)境杯道,我們會發(fā)現(xiàn)這里沒有很好的條件匪煌。但是這真的是這樣的嗎?

一開始我也很好奇蕉饼,為什么Perl 就弄一個很好的IDE呢虐杯?這樣會很方便我們進(jìn)行調(diào)試啊,畢竟調(diào)試一個程序的時間占了我們絕大部分的時間昧港。后來隨著我對Perl的認(rèn)識擎椰,對Linux的熟悉,我發(fā)現(xiàn)更本不需要這樣:

  • 計(jì)算機(jī)語言本身就像是一種我們自己的語言创肥,那么我請問你在寫文章的時候达舒,你有什么調(diào)試的環(huán)節(jié)嗎值朋?(聽起來可能很拗口)也就是說如果不用IDE進(jìn)行邊寫程序邊調(diào)試看那些變量的值的情況,很適合我們一氣呵成巩搏,就像是我們在進(jìn)行寫作昨登,IDE 只是一個輔助的工具。如果你想要真正地掌握好一門計(jì)算機(jī)語言贯底,那么你不需要總是借助于一個IDE丰辣。

  • Larry 在發(fā)明Perl 之前是一個語言學(xué)家。對于語言有一定的研究禽捆,我們個人會感覺Perl 好像只能寫不能看笙什,但是其實(shí)這是很符合我們自然語言的。因?yàn)樽匀徽Z言自己就缺乏很多的歧義性胚想。對于一個聽者來說這種歧義性其實(shí)相當(dāng)于我們看別人活或者自己寫程序時的那些感覺琐凭。所以我們可以注意一下自己編程序的方式,正如你自己說話要口齒清楚浊服。

  • 學(xué)到這里你是否想過一個問題统屈,你在和別人交流的時候。有一個隱含的原則牙躺,就是:盡量使用雙方都知道的詞匯避免使用一些特殊的詞匯愁憔。 這樣的話就可以很高效地進(jìn)行溝通了。在我們的日常的生活中孽拷,我們其實(shí)就在使用一些我們大家都很熟悉的一般而又共通的詞匯在進(jìn)行著交流惩淳,不是嗎?比如說乓搬,衣食住行這個我們大家都是共同深受的,所以這些東西是可以直接交流的代虾。 同樣在Perl中也一樣进肯,它里面也有一些內(nèi)置的變量,這些內(nèi)置的變量你就可以想象成一個我們都可能會用到的內(nèi)置的變量棉磨。

  • 對于Perl 沒有一個很好的集成開發(fā)環(huán)境的話江掩,perl還有一個很好的工具: 叫做Perl one line 這個Perl one line 可以很好地代替我們的一些函數(shù)學(xué)習(xí)以及腳本測試的工作。

Perl one line

夯實(shí)基礎(chǔ)

首先明確 perl 的一個規(guī)則

  • 在perl 里面雙引號可以用 qq{} qq## 還有 qq() 代替
  • 所以當(dāng)然 用一個q 可以代替一個單引號
  • 重要的一點(diǎn):在windos 中要用 雙引號+qq//來進(jìn)行撰寫乘瓤;而在linux中是單引號+雙引號

例子:

# on the windos
perl -e "print qq/Hello world\n/"
# one the linux
perl -e 'print "Hellow world" '

-e

-e 是執(zhí)行單行命令的必選參數(shù)环形,它告訴perl 你現(xiàn)在執(zhí)行的是單行命令。

圖片-e 參數(shù).png

-n

表示直接按行遍歷文件:

perl -e "while (<>){ ... }"
# 等同于
perl  -ne " . . . "

-p

表示按行處理文件衙傀,并在處理之后打印處理的結(jié)果

-a

表示按照空白分隔符分割行并存儲結(jié)果到默認(rèn)數(shù)組@F抬吟,一般與 -ne 一起用

perl -ane "print $F[2]"

-F

指定-a選項(xiàng)使用的分隔符,支持正則

perl -F'###' -ane '...'

-l

表示對所有輸入的命令進(jìn)行chomp,即去除\n;同時统抬,對所有輸出數(shù)據(jù)
自動附件\n

-i

啟動原文編輯功能: 這一點(diǎn)可以代替sed 操作命令

#將原文件所有小寫轉(zhuǎn)換成大寫
perl -i -pe 'tr/a-z/A-Z/'
# 按指定后綴備份原文件火本,并修改原文件
perl -i.bak -pe 'tr/a-z/A-Z/'

-0 【數(shù)值】

指定換行符記號($/變量)危队,用8進(jìn)制表示,默認(rèn)為換行

-00 | 段落模式钙畔,即以連續(xù)換行為分隔符
-0777 | 禁用分隔符茫陆,一次讀入整個文件
-0076 | 對應(yīng)分隔符為'>',F(xiàn)asta

-M

使用模塊

Perl單行命令可以使用perl的模塊擎析,如使用sum函數(shù)的模塊:

perl -MList::Util=sum -alne 'print sum @F'

BEGIN 和 END

Perl也可以像awk一樣使用END命令簿盅,如打印出文件中總單詞個數(shù)

perl -alne 'BEGIN{ print "start to run..."}; $t += @F; END { print $t}'

快速解決小問題

1.提取某個fasta的記錄

perl -0076 -ane 'print qq{>$_} if $F[0] eq qq{gene_id}' out.fa

2.查看前10行

# 必須注意,幾乎所有perl命令可以在任何操作系統(tǒng)切換揍魂,linux mac windows
perl -pe 'exit if $.>10'

3. 給定一個包含很多記錄的csv文件桨醋,然后查看某一列的unique記錄

可以直接用awk來實(shí)現(xiàn)

awk -F, '{print $3}' cog_metadata.csv |sort |uniq

下面用Perl

perl -F',' -lane ' $key = $F[2]; $myhash{$key} ++; END {print "$_ $myhash{$_}" for keys %myhash}' cog_metadata.csv 

我們來用time命令比較一下結(jié)果,輸出結(jié)果如下:

$ time awk -F, '{print $3}' cog_metadata.csv |sort |uniq
UK-ENG
UK-NIR
UK-SCT
UK-WLS
adm1
awk -F, '{print $3}' cog_metadata.csv  5.65s user 0.04s system 99% cpu 5.702 total
sort  0.53s user 0.01s system 8% cpu 6.243 total
uniq  0.21s user 0.00s system 3% cpu 6.245 total

$ time perl -F',' -lane ' $key = $F[2]; $myhash{$key} ++; END {print "$_ $myhash{$_}" for keys %myhash}' cog_metadata.csv
UK-WLS 34913
UK-NIR 4514
UK-ENG 313799
UK-SCT 33946
adm1 1
perl -F',' -lane  cog_metadata.csv  3.89s user 0.03s system 99% cpu 3.927 total
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末愉烙,一起剝皮案震驚了整個濱河市讨盒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌步责,老刑警劉巖返顺,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蔓肯,居然都是意外死亡遂鹊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門蔗包,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秉扑,“玉大人,你說我怎么就攤上這事调限≈勐剑” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵耻矮,是天一觀的道長秦躯。 經(jīng)常有香客問我,道長裆装,這世上最難降的妖魔是什么踱承? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮哨免,結(jié)果婚禮上茎活,老公的妹妹穿的比我還像新娘。我一直安慰自己琢唾,他們只是感情好载荔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慧耍,像睡著了一般身辨。 火紅的嫁衣襯著肌膚如雪丐谋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天煌珊,我揣著相機(jī)與錄音号俐,去河邊找鬼。 笑死定庵,一個胖子當(dāng)著我的面吹牛吏饿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔬浙,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猪落,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了畴博?” 一聲冷哼從身側(cè)響起笨忌,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俱病,沒想到半個月后官疲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亮隙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年途凫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溢吻。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡维费,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出促王,到底是詐尸還是另有隱情犀盟,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布蝇狼,位于F島的核電站且蓬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏题翰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一诈胜、第九天 我趴在偏房一處隱蔽的房頂上張望豹障。 院中可真熱鬧,春花似錦焦匈、人聲如沸血公。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽累魔。三九已至摔笤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垦写,已是汗流浹背吕世。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梯投,地道東北人命辖。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像分蓖,于是被迫代替她去往敵國和親尔艇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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