Perl單行(Perl One-Liners)命令

Perl語言的一大好處就是,在日常處理各種小任務(wù)時,可以利用Perl單行的各種內(nèi)置變量和參數(shù)快捷實現(xiàn)壮虫。本文記錄平時做分析時常用的perl內(nèi)置變量奋岁、基本參數(shù)和一些常用命令思瘟。

個人博客原文地址

Perl單行基本參數(shù)

  • -e 所有perl one-liner都需要添加的參數(shù)
  • -n 將會循環(huán)讀入每行文件,輸出需要加‘print’
  • -p 將會直接print每行
  • -i 直接在源文件里進(jìn)行修改了闻伶。 -i.bak 源文件備份
  • -l 將會使輸入字符串去掉回車符號滨攻,而輸出再加上回車符號。
  • -a 以空格為分割輸入蓝翰,并將分割的結(jié)果自動保存到@F數(shù)組中光绕。
  • -F 指定分割符號,需要與-a一起用直接加分割符號: 如perl -F:畜份,可以使用正則表達(dá)式诞帐;可利用scalar @F查報錯。

常用perl -F, -alne:自動以,為分割符號爆雹,保存到數(shù)組@F中停蕉,循環(huán)讀取每行并去除末位\n符號。

Perl常用內(nèi)置變量(predefined variables)

  • $_ 默認(rèn)為每行的內(nèi)容
  • $. 為每行的行號數(shù)字钙态,類似于awk中的NR
  • $/ 輸入的每行的分隔符慧起,默認(rèn)是\n,windows下有些文件是\n\r結(jié)尾。
  • $\ 輸出的每行的分隔符册倒◎炯罚可指定
  • $1, $2, $3 正則表達(dá)式中匹配到括號里的內(nèi)容,從里往外數(shù)
  • $, 標(biāo)量之間的分割符號驻子,例如perl -le '$,=":"; print 1, 2, 3'
  • $" 數(shù)組中的每個標(biāo)量的分隔符灿意,默認(rèn)直接print數(shù)組是以\s空格分開。perl -le '$"=":";@data=(1,2,3);print "@data"'
  • $反引號 $&, $': 正則表達(dá)式中崇呵,匹配內(nèi)容前缤剧、匹配內(nèi)容、匹配內(nèi)容后會默認(rèn)賦值給這三個變量域慷。實用
  • @F -a鞭执、-F參數(shù)將每行分割的內(nèi)容自動加到數(shù)組@F中
  • @ARGV 最常用的接受文件命令
  • %ENV 系統(tǒng)環(huán)境中的一些變量加載到%ENV哈希中

間距司顿、空行(spacing)

對每行文件加空行:

perl -pe '$\ = "\n"'
perl -pe '$_ .="\n" unless /^$/ '

去除空行:

perl -ne 'print unless /^$/'
perl -lne 'print if length'

對行處理:編號、計數(shù)(Numbering)兄纺、選擇目標(biāo)行輸出

僅對非空行計數(shù)大溜,并顯示行號:

perl -pe ' $_ .= "$.\t" ' file.txt
perl -ne 'print ++$x . "\t$_" if /\S/' file.txt

輸出 匹配到pattern的行,并顯示行號:

perl -ne 'print unless /pattern/' file.txt ##除了目標(biāo)匹配行
perl -ne 'print "$.\t$_" if /regex/ ' file.txt
perl -ne 'print ++$x."\t$_" if /reads/ ' test.log

輸出匹配到pattern行的下面的一行:

perl -ne ' if($p=0){print; $p=0} $p++ if /pattern/ ' file.txt
perl -ne '$p && print && ($p=0); $p++ if /pattern/' file.txt
perl -ne '$p && print; $p = /science/'

輸出匹配到/AAA/和/BBB/的行:

perl -ne '/AAA/ && /BBB/ && print'

輸出第13行估脆、或除了第13行钦奋;輸出第13、19疙赠、50行付材;輸出13~40行

perl -ne 'print if $. == 13' file.txt
perl -ne 'print if $. != 13' file.txt
perl -ne '$. == 13 && print && exit'

perl -ne 'print if $.==13 || $.==19 || $.==40' file.txt

perl -ne 'print if $.>=13 && $.<=40' file.txt
perl -ne 'print if 13..40' file.txt

輸出START和END之間的行if/unless:

perl -i.old -ne 'print if /^START$/ .. /^END$/' foo.txt

僅輸出奇數(shù)行、偶數(shù)行:

perl -ne 'print if $. % 2' text
perl -ne 'print if $. %2==0' text

僅輸出文件中重復(fù)的行

### 出現(xiàn)兩次就輸出
perl -ne 'print if ++$a{$_} ==2'

去重復(fù)行圃阳,僅輸出第一次出現(xiàn)的行

perl -ne ' print unless $a{$_}++ ' file.txt

計算相關(guān)

輸出第一列數(shù)字相加之和:

perl -alne '$sum+=$F[0];END{print $sum}' file.txt

輸出時間:

perl -le 'print scalar(localtime)'
perl -le 'print join ":", (localtime)[2,1,0] '

輸出從5~15當(dāng)中的10個隨機(jī)數(shù)字

perl -le 'print join ",", map { int(rand(15-5))+5 } 1..10'

標(biāo)量文字處理相關(guān)

輸出a到zz所有字母(..的使用)

perl -le ' $,=","; print a..zz ' # print("a".."zz")

輸出指定長度的字符(x為重復(fù))

perl -le 'print "a"x50'

輸出從1~100的質(zhì)數(shù)(grep用法)

perl -le '@even = grep {$_ % 2 == 0} 1..100; print "@even"'
``

利用tr(y)修改字符

```perl
perl -le '$string = "bananas"; $string =~ y/A-Za-z/N-ZA-Mn-za-m/; print $string'
perl -lpe 'y/A-Za-z/N-ZA-Mn-za-m/' bananas.txt

自動轉(zhuǎn)換大小寫字符 \u \L

perl -lne 'print "\u$_"'
perl -plne '$_=\L$_\E'
perl -ple ' s/(\w+)/\u$1/g '

去除每行開頭厌衔、結(jié)尾的空格內(nèi)容s///g

perl -ple ' s/^\s+|\s+$//g '

反向輸出 數(shù)組的內(nèi)容

perl -F: -alne '$" = ","; print "@{[reverse @F]}"' file.txt # a:b:c:d:e

生信常用perl腳本記錄

批量根據(jù)id提取序列

perl -lne 'if($switch){if(/^>/){$flag=0;m/^>?(\S+).*?$/;$flag=1 if $need{$1};}print if $flag}else{m/^>?(\S+).*?$/;$need{$1}++}$switch=1 if eof(ARGV)' id.txt seq.fasta >seq_id.fas

FastQ文件轉(zhuǎn)為FastaA文件

perl -e '{ while($id=<>) { chomp $id; chomp ($seq=<>); <>; <>; $id=~s/^@/>/;print " $id\n$seq\n"; } }'  file.fq >file.fa

參考資料:Perl One-liners (https://catonmat.net/books)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捍岳,隨后出現(xiàn)的幾起案子富寿,更是在濱河造成了極大的恐慌,老刑警劉巖锣夹,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件页徐,死亡現(xiàn)場離奇詭異,居然都是意外死亡银萍,警方通過查閱死者的電腦和手機(jī)变勇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贴唇,“玉大人搀绣,你說我怎么就攤上這事〈疗” “怎么了链患?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長物咳。 經(jīng)常有香客問我,道長蹄皱,這世上最難降的妖魔是什么览闰? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮巷折,結(jié)果婚禮上压鉴,老公的妹妹穿的比我還像新娘。我一直安慰自己锻拘,他們只是感情好油吭,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布击蹲。 她就那樣靜靜地躺著,像睡著了一般婉宰。 火紅的嫁衣襯著肌膚如雪歌豺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天心包,我揣著相機(jī)與錄音类咧,去河邊找鬼。 笑死蟹腾,一個胖子當(dāng)著我的面吹牛痕惋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娃殖,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼值戳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了炉爆?” 一聲冷哼從身側(cè)響起堕虹,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叶洞,沒想到半個月后鲫凶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡衩辟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年螟炫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艺晴。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡昼钻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出封寞,到底是詐尸還是另有隱情然评,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布狈究,位于F島的核電站碗淌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏抖锥。R本人自食惡果不足惜亿眠,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磅废。 院中可真熱鬧纳像,春花似錦、人聲如沸拯勉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至岔帽,卻和暖如春玫鸟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背山卦。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工鞋邑, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人账蓉。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓枚碗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铸本。 傳聞我的和親對象是個殘疾皇子肮雨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

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

  • 在這個附錄中,我總結(jié)了 Perl 使用最頻繁的特殊變量箱玷,也就是系統(tǒng)預(yù)置的變量怨规。比如$_, $., S/, $\, ...
    滄浪之水v閱讀 3,278評論 0 8
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,367評論 0 5
  • ¥開啟¥ 【iAPP實現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,358評論 0 17
  • Perl 6 單行程序 這本書在進(jìn)行之中锡足。我希望你能覺得它有趣波丰,甚至可能有用!如果你想貢獻(xiàn)反饋的話舶得,那么很歡迎提問...
    焉知非魚閱讀 1,253評論 3 5
  • /顧城/ 你不愿意種花 你說:“我不愿意看見它一點點凋落”是的掰烟,為了避免結(jié)束 你避免了一切開始 顧城:195...
    騎士658閱讀 1,152評論 1 4