【shell筆記>文本處理|專項】Linux數(shù)據(jù)文本處理工具(1)

這里簡要地整理下Linux用來處理數(shù)據(jù)文本的工具系瓢。具體命令詳情請在Linux命令大全中搜索或者查閱其他相關資料。

head,tail查看文檔頭尾。-n選項可以指定行數(shù)。

less用來查閱文檔孙咪,q退出,space bar翻頁巡语,g第一行翎蹈,G最后一行,j下男公,k上,/<pattern>往下搜索模式荤堪,?<pattern>往上搜索模式,n前一個匹配字符,N后一個匹配字符澄阳。

less可以用于debug拥知,查看中間輸出結果。比如

step1 input.txt | step2 | step3 > output.txt
# step1,2,3為程序或命令名

可以寫為

step1 input.txt | less
step1 input.txt | step2 | less
step1 input.txt | step2 | step3 | less

純文本信息匯總

wc命令默認依次輸出單詞數(shù)碎赢、行數(shù)低剔、總字符數(shù)。查看行數(shù)使用wc -l揩抡。
如果存在空行户侥,空行會被計數(shù)÷袜停可以使用grep命令實現(xiàn)非空行計數(shù)
grep -c "[^ \\n\\t]" some_data.bed

ls -lh以易讀形式查看文件大小蕊唐。

輸出文件列數(shù):

# -F指定分隔符,此處假定是table鍵分隔烁设,默認空格鍵
awk -F "\t" '{print NF; exit}' some_data.bed

怎么去除注釋的元數(shù)據(jù)行呢替梨?怎么計數(shù)非注釋行行數(shù)呢?

可以使用tail結合awk装黑,試試gtf(基因組注釋文件)

wsx@wsx-ubuntu:~/Work/research/Promoter_Research$ head -n 6 Homo_sapiens.GRCh37.75.gtf 
#!genome-build GRCh37.p13
#!genome-version GRCh37
#!genome-date 2009-02
#!genome-build-accession NCBI:GCA_000001405.14
#!genebuild-last-updated 2013-09
1   pseudogene  gene    11869   14412   .   +   .   gene_id "ENSG00000223972"; gene_name "DDX11L1"; gene_source "ensembl_havana"; gene_biotype "pseudogene";

可以看到注釋行是5行副瀑,我們利用tail試試去掉它

# 注意此處 -n后接的"+"號
wsx@wsx-ubuntu:~/Work/research/Promoter_Research$ tail -n +5 Homo_sapiens.GRCh37.75.gtf | head -n 1
#!genebuild-last-updated 2013-09

發(fā)現(xiàn)還有一行沒去掉

wsx@wsx-ubuntu:~/Work/research/Promoter_Research$ tail -n +6 Homo_sapiens.GRCh37.75.gtf | head -n 1
1   pseudogene  gene    11869   14412   .   +   .   gene_id "ENSG00000223972"; gene_name "DDX11L1"; gene_source "ensembl_havana"; gene_biotype "pseudogene";

成功搞定,然后結合前面提到的awk命令即可計算行數(shù)恋谭。

上面方法魯棒性不夠(人為的確定行數(shù))糠睡,一種更為通用的方法是grep結合awk命令

wsx@wsx-ubuntu:~/Work/research/Promoter_Research$ grep -v "^#" Homo_sapiens.GRCh37.75.gtf | head -n 1
1   pseudogene  gene    11869   14412   .   +   .   gene_id "ENSG00000223972"; gene_name "DDX11L1"; gene_source "ensembl_havana"; gene_biotype "pseudogene";

推薦使用這種。

cut可以處理列數(shù)據(jù)疚颊,-f選項指定列狈孔,可以是一個范圍(比如2-8),注意不能用它給列排序材义。

wsx@wsx-ubuntu:~/Work/research/Promoter_Research$ grep -v "^#" Homo_sapiens.GRCh37.75.gtf | head -n 10 | cut -f 3
gene
transcript
exon
exon
exon
transcript
exon
exon
exon
transcript
wsx@wsx-ubuntu:~/Work/research/Promoter_Research$ grep -v "^#" Homo_sapiens.GRCh37.75.gtf | head -n 10 | cut -f 3-5
gene    11869   14412
transcript  11869   14409
exon    11869   12227
exon    12613   12721
exon    13221   14409
transcript  11872   14412
exon    11872   12227
exon    12613   12721
exon    13225   14412
transcript  11874   14409

-d選項可以指定分隔符均抽,比如-d,指定,為分隔符。

使用column命令來格式化輸出其掂,上次的命令結果輸出明顯沒對齊油挥,我們把它對齊看看:

wsx@wsx-ubuntu:~/Work/research/Promoter_Research$ grep -v "^#" Homo_sapiens.GRCh37.75.gtf | head -n 10 | cut -f 3-5 | column -t
gene        11869  14412
transcript  11869  14409
exon        11869  12227
exon        12613  12721
exon        13221  14409
transcript  11872  14412
exon        11872  12227
exon        12613  12721
exon        13225  14412
transcript  11874  14409

注意,使用這個命令是為了好觀察款熬,不要把用它處理然后把結果傳入文本(會導致程序處理文件效率降低深寥,因為文本解析速度會下降)。

cutcolumn默認以\t為分隔符贤牛,這里也能夠用-s選項指定翩迈。

先把之前的tab分隔文件弄成逗號分隔文件,然后使用-s選項看看:

wsx@wsx-ubuntu:~/Work/research/Promoter_Research$ grep -v "^#" Homo_sapiens.GRCh37.75.gtf | head -n 10 | cut -f 3-5 |  awk '{FS="\t";OFS=",";}{print $1,$2,$3}'
gene,11869,14412
transcript,11869,14409
exon,11869,12227
exon,12613,12721
exon,13221,14409
transcript,11872,14412
exon,11872,12227
exon,12613,12721
exon,13225,14412
transcript,11874,14409

wsx@wsx-ubuntu:~/Work/research/Promoter_Research$ grep -v "^#" Homo_sapiens.GRCh37.75.gtf | head -n 10 | cut -f 3-5 |  awk '{FS="\t";OFS=",";}{print $1,$2,$3}'| column -s "," -t
gene        11869  14412
transcript  11869  14409
exon        11869  12227
exon        12613  12721
exon        13221  14409
transcript  11872  14412
exon        11872  12227
exon        12613  12721
exon        13225  14412
transcript  11874  14409

grep處理速度非常之快盔夜,能用它盡量用它。--color=auto可以激活顏色(標記匹配文字),更方便查看喂链。

-v選項排除匹配到的返十,-w進行完全匹配。這樣可以防止椭微,你想排除abc結果把abc1洞坑,abcd也排除掉了。

-B指定輸出包括匹配到的前多少行蝇率,比如-B1就是前一行迟杂;-A指定輸出包括匹配到的后多少行,比如-A2就是包括了后兩行本慕。-C指定輸出包括匹配到的前后多少行排拷。
grep支持基本正則表達式,-E指定支持擴展表達式锅尘,或者用egrep命令监氢。
-c選項對匹配的行計數(shù);-o選項只抽離輸出匹配的部分

wsx@wsx-ubuntu:~/Work/research/Promoter_Research$ grep -E -o 'gene_id "\w+"' Homo_sapiens.GRCh37.75.gtf | head -n 5
gene_id "ENSG00000223972"
gene_id "ENSG00000223972"
gene_id "ENSG00000223972"
gene_id "ENSG00000223972"
gene_id "ENSG00000223972"

發(fā)現(xiàn)冗余項非常多藤违,如果我們只要唯一的呢浪腐,怎么辦?

wsx@wsx-ubuntu:~/Work/research/Promoter_Research$ grep -E -o 'gene_id "(\w+)"' Homo_sapiens.GRCh37.75.gtf | cut -f2 -d" "| sed 's/"http://g' | sort | uniq | head -n 10
ENSG00000000003
ENSG00000000005
ENSG00000000419
ENSG00000000457
ENSG00000000460
ENSG00000000938
ENSG00000000971
ENSG00000001036
ENSG00000001084
ENSG00000001167

雖然我的筆記本呼啦啦作響顿乒,但是還是非骋榻郑快就跑完了。


后面內容還不少璧榄,分兩次講吧~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末特漩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子犹菱,更是在濱河造成了極大的恐慌拾稳,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腊脱,死亡現(xiàn)場離奇詭異访得,居然都是意外死亡,警方通過查閱死者的電腦和手機陕凹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門悍抑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人杜耙,你說我怎么就攤上這事搜骡。” “怎么了佑女?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵记靡,是天一觀的道長谈竿。 經常有香客問我,道長摸吠,這世上最難降的妖魔是什么空凸? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮寸痢,結果婚禮上呀洲,老公的妹妹穿的比我還像新娘。我一直安慰自己啼止,他們只是感情好道逗,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著献烦,像睡著了一般滓窍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仿荆,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天贰您,我揣著相機與錄音,去河邊找鬼拢操。 笑死锦亦,一個胖子當著我的面吹牛,可吹牛的內容都是我干的令境。 我是一名探鬼主播杠园,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舔庶!你這毒婦竟也來了抛蚁?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤惕橙,失蹤者是張志新(化名)和其女友劉穎瞧甩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弥鹦,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡肚逸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了彬坏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朦促。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖栓始,靈堂內的尸體忽然破棺而出务冕,到底是詐尸還是另有隱情,我是刑警寧澤幻赚,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布禀忆,位于F島的核電站臊旭,受9級特大地震影響,放射性物質發(fā)生泄漏油湖。R本人自食惡果不足惜巍扛,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乏德。 院中可真熱鬧,春花似錦吠昭、人聲如沸喊括。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郑什。三九已至,卻和暖如春蒲肋,著一層夾襖步出監(jiān)牢的瞬間蘑拯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工兜粘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留申窘,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓孔轴,卻偏偏與公主長得像剃法,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子路鹰,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,160評論 2 33
  • 本文筆記源自這里——[實驗樓]歡迎大家在下面交流其中有問題的地方喜歡請點收藏贷洲,每日更新(全部已親自實踐). 一. ...
    東皇Amrzs閱讀 3,989評論 7 54
  • awk介紹awk變量printf命令:實現(xiàn)格式化輸出操作符awk patternawk actionawk數(shù)組aw...
    哈嘍別樣閱讀 1,564評論 0 4
  • 基礎命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,095評論 0 0
  • 1.昭君曲 漢宮的燈火遠了 曾經那顆黯淡凋零的星 也不做珠玉包裹的過客 這里的篝火正旺 跳動著他的紅舌頭 映著我的...
    快樂好奇心閱讀 170評論 0 0