sed 命令從文本或者標(biāo)準(zhǔn)輸入中每次讀入一行數(shù)據(jù)。
網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給成都創(chuàng)新互聯(lián)公司一個(gè)展示的機(jī)會(huì)來證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。
我們先從簡(jiǎn)單的實(shí)例出發(fā),看下該命令怎么將一列中的 chrm12 , chrom2 等轉(zhuǎn)換成 chr12 , chr2 的格式。
雖然示例文件處理僅僅只有三行,但我們可以將這種處理方式運(yùn)用到上G甚至更大的數(shù)據(jù)文件中,而不用打開整個(gè)文件進(jìn)行處理。并且,可以借助重導(dǎo)向?qū)崿F(xiàn)對(duì)數(shù)據(jù)處理結(jié)果的輸出。
sed 替換命令采用的格式是
sed 會(huì)自動(dòng)搜索符合 pattern 的字符串,然后修改為 replacement (我們想要修改后的樣子)。一般默認(rèn) sed 只替換第一個(gè)匹配的 pattern ,我們可以通過添加全局標(biāo)識(shí) g 將其應(yīng)用到數(shù)據(jù)的所有行中。
如果我們想要忽略匹配的大小寫,使用 i 標(biāo)識(shí)
默認(rèn) sed 命令支持基本的POSIX正則表達(dá)式(BRE),可以通過 -E 選項(xiàng)進(jìn)行拓展(ERE)。很多的Linux命令都這種方式,像常用的 grep 命令。
再看一個(gè)實(shí)例,如果我們想把 chr1:28647389-28659480 這樣格式的文字轉(zhuǎn)換為三列,可以使用:
我們聚焦在第二個(gè)命令 sed 上。初看雜亂無章,但是從最大的結(jié)構(gòu)看依舊是
先看 pattern 部分,這是由幾個(gè)簡(jiǎn)單正則表達(dá)式組成的復(fù)合體,幾個(gè) () 括起來的字符串可以單獨(dú)看。第一個(gè)匹配 chr 加上一個(gè)非冒號(hào)的字符,第二個(gè)和第三個(gè)都是匹配多個(gè)數(shù)字。最開始的 ^ 表示以 chr 起始(前面沒有字符),各個(gè)括號(hào)中間的是對(duì)應(yīng)的字符。整體的 pattern 的目的就是為了找到文本中符合這種模式的字符串,如果只是想把這個(gè)模式找出來的話,幾個(gè)括號(hào)可以不用加。顯然這幾個(gè)括號(hào)的作用就是將它們劃分成多個(gè)域,幫助 sed 進(jìn)行處理??梢钥吹?replacement 部分存在 \1 , \2 , \3 ,它恰好對(duì)應(yīng) () 的順序。這樣我們?cè)谥虚g插入 \t 制表符,就可以完成我們想要的功能:將原字符串轉(zhuǎn)換為三列。
我本身對(duì)字符串并不是非常熟悉,懂一些元字符,可能講解的不是很到位。不熟悉正則表達(dá)式的朋友,可以學(xué)習(xí)和參考下 學(xué)習(xí)正則表達(dá)式 ,是我從Github上Copy到的非常好的學(xué)習(xí)資料,有興趣也可以Fork學(xué)習(xí)。
上山的路總是有很多條,我們下面看下其他實(shí)現(xiàn)該功能的辦法:
這三種方式看起來都非常簡(jiǎn)單有效。它處理字符串的思路不是從匹配pattern然后替換入手,不對(duì),應(yīng)該說是不是從匹配所有pattern然后替換入手。處理的關(guān)鍵是只處理字符串中看似無用的連字符 : 與 - ,將其替換成制表符從而輕松完成分割。
sed 's/:/\t/' | sed 's/-/\t/' 可以通過 -e 選項(xiàng)寫為 sed -e 's/:/\t/' -e 's/-/\t/' ,效果等價(jià)。
默認(rèn) sed 命令支持基本的POSIX正則表達(dá)式(BRE),可以通過 -E 選項(xiàng)進(jìn)行拓展(ERE)。很多的Linux命令都這種方式,像常用的 grep 命令。
再看一個(gè)實(shí)例,如果我們想把 chr1:28647389-28659480 這樣格式的文字轉(zhuǎn)換為三列,可以使用:
我們聚焦在第二個(gè)命令 sed 上。初看雜亂無章,但是從最大的結(jié)構(gòu)看依舊是
先看 pattern 部分,這是由幾個(gè)簡(jiǎn)單正則表達(dá)式組成的復(fù)合體,幾個(gè) () 括起來的字符串可以單獨(dú)看。第一個(gè)匹配 chr 加上一個(gè)非冒號(hào)的字符,第二個(gè)和第三個(gè)都是匹配多個(gè)數(shù)字。最開始的 ^ 表示以 chr 起始(前面沒有字符),各個(gè)括號(hào)中間的是對(duì)應(yīng)的字符。整體的 pattern 的目的就是為了找到文本中符合這種模式的字符串,如果只是想把這個(gè)模式找出來的話,幾個(gè)括號(hào)可以不用加。顯然這幾個(gè)括號(hào)的作用就是將它們劃分成多個(gè)域,幫助 sed 進(jìn)行處理??梢钥吹?replacement 部分存在 \1 , \2 , \3 ,它恰好對(duì)應(yīng) () 的順序。這樣我們?cè)谥虚g插入 \t 制表符,就可以完成我們想要的功能:將原字符串轉(zhuǎn)換為三列。
我本身對(duì)字符串并不是非常熟悉,懂一些元字符,可能講解的不是很到位。不熟悉正則表達(dá)式的朋友,可以學(xué)習(xí)和參考下 學(xué)習(xí)正則表達(dá)式 ,是我從Github上Copy到的非常好的學(xué)習(xí)資料,有興趣也可以Fork學(xué)習(xí)。
上山的路總是有很多條,我們下面看下其他實(shí)現(xiàn)該功能的辦法:
這三種方式看起來都非常簡(jiǎn)單有效。它處理字符串的思路不是從匹配pattern然后替換入手,不對(duì),應(yīng)該說是不是從匹配所有pattern然后替換入手。處理的關(guān)鍵是只處理字符串中看似無用的連字符 : 與 - ,將其替換成制表符從而輕松完成分割。
sed 's/:/\t/' | sed 's/-/\t/' 可以通過 -e 選項(xiàng)寫為 sed -e 's/:/\t/' -e 's/-/\t/' ,效果等價(jià)。
默認(rèn), sed 會(huì)輸出每一行的結(jié)果,用 replacement 替換 pattern ,但實(shí)際中我們可能會(huì)因此得到不想要的結(jié)果。比如下面的這個(gè)例子。
如果我們想要抓出 gtf 文件第九列的轉(zhuǎn)錄名,可能會(huì)使用以下命令
我們可以發(fā)現(xiàn)一些沒有轉(zhuǎn)錄名行的結(jié)果是輸出整行,這可不是我們想要的。一種解決辦法是在使用 sed 之前先抓出有 transcript_id 的行。其實(shí) sed 命令本身也可以通過選項(xiàng)和參數(shù)設(shè)定解決這個(gè)問題,這里我們可以用 -n 選項(xiàng)關(guān)閉 sed 輸出所有行,在最末的 / 后加 p 只輸出匹配項(xiàng)。
注意方括號(hào)內(nèi) ^ 是非(取反)的意思。
解釋如下:
+ 號(hào)的使用是一種非貪婪的方法。很多新手會(huì)用 * ,這是貪婪操作,往往會(huì)得不償失,需要注意喔。
使用 * 時(shí)它會(huì)盡量多地去匹配符合要求的模式。
我們也可以用 sed 命令來獲取特定范圍的行,比如說我要取出頭10行,可以使用
20到50行
當(dāng)然 sed 的功能特性遠(yuǎn)遠(yuǎn)不止這些,有待于大家更多地挖掘。不過需要注意的是,盡量讓工具干它最擅長(zhǎng)的事情。如果是復(fù)雜地大規(guī)模計(jì)算,還是最好寫個(gè)Python腳本。
首先需要記住 連續(xù) 命令和 管道 命令的區(qū)別:前者是簡(jiǎn)單地一個(gè)一個(gè)按順序運(yùn)行程序(一般用 或者 ; );后者前一個(gè)程序的輸出結(jié)果會(huì)直接傳到下一個(gè)命令程序的輸入中(這不就是流程化操作么,用 | 分隔)。
子shell可以讓我們?cè)谝粋€(gè)獨(dú)立的shell進(jìn)程中執(zhí)行連續(xù)命令。
首先看個(gè)例子
發(fā)現(xiàn)僅僅加了個(gè)括號(hào),結(jié)果就不同了。第二個(gè)命令就用了子shell,它把兩個(gè) echo 命令放進(jìn)單獨(dú)的空間執(zhí)行后將結(jié)果傳給下游。
子shell在對(duì) gtf 文件進(jìn)行操作時(shí)有個(gè)非常有意思有用的用處。我們?nèi)绻雽?duì) gtf 文件排序,但是又想要保留文件頭部注釋信息,我們就能夠用兩次 grep 操作分別抓出注釋和非注釋信息,然后又把它結(jié)合在一起。下面看看效果,用 less 進(jìn)行檢查:
可以看到,子shell確實(shí)能夠給我們提供非常有用的操作去組合命令實(shí)現(xiàn)想要的功能。
很多生信命令行工具需要提供多個(gè)輸入和輸出參數(shù),這用在管道命令里可能會(huì)導(dǎo)致非常低效的情形(管道只接受一個(gè)標(biāo)準(zhǔn)輸入和輸出)。幸好,我們可以使用命令管道來解決此類問題。
命名管道 ,也成為FIFO(先入先出,額,這不是隊(duì)列么:smile:)。它是一個(gè)特殊的排序文件,命名管道有點(diǎn)像文件,它可以永久保留在你的文件系統(tǒng)上(估計(jì)本質(zhì)就是文件吧~)。
我們用 mkfifo 來生成它
可以它看它權(quán)限的第一個(gè)字符是p,指代是pipe。說明是個(gè)特殊文件。
我們像文件一樣對(duì)它進(jìn)行一些操作
比如當(dāng)使用一個(gè)生信命令行工具
in1.fq in2.fq 就可以上游輸出數(shù)據(jù)到 processing_tool 的命名管道;同理 out1.fq out2.fq 可以是命名管道用來寫進(jìn)輸出數(shù)據(jù)。
但這樣我們每次都得不停地創(chuàng)建和刪除這些文件,解決辦法是使用匿名管道,也叫進(jìn)程替換。
不能光說,看看例子就知道和理解了。
echo 命令運(yùn)行后使用了進(jìn)程替換,產(chǎn)生匿名文件,然后匿名文件被重導(dǎo)向 cat 命令。
把它用到工具上,就變成了(假定上游zcat下游執(zhí)行g(shù)rep命令)
關(guān)于Linux數(shù)據(jù)處理工具內(nèi)容全部整理發(fā)布在我的博客上。 詳情點(diǎn)擊
;?????awk命令是linux下的一個(gè)文件管理命令,通常是用于文本和數(shù)據(jù)進(jìn)行處理的編程語言,awk命令主要有兩個(gè)功能,具體介紹如下:
1、awk命令可以在linux/unix下對(duì)文本和數(shù)據(jù)進(jìn)行處理;
2、awk命令支持用戶自定義函數(shù)和動(dòng)態(tài)正則表達(dá)式。
參考范例:
比如打印每一行的第二和第三個(gè)字段,具體命令為:
[root@linuxcool~]#awk'{print$2,$3}'file
awk命令的具體語法格式為awk[參數(shù)][文件]。
參數(shù):
-F指定輸入時(shí)用到的字段分隔符
-v自定義變量
-f從腳本中讀取awk命令
-m對(duì)val值設(shè)置內(nèi)在限制
以上就是的分享了,希望能夠幫助到大家。
本文章基于ThinkpadE15品牌、centos7系統(tǒng)撰寫的。
1.grep:找出文件中含有關(guān)鍵字的行
2.cat:讀取,顯示或拼接文件內(nèi)容
3.head:查看文件前多少行,默認(rèn)為10行
4.less:使文件內(nèi)容可以翻頁顯示,按q退出觀看模式
5.sed :文本替換
6.vi:創(chuàng)建文件并寫入內(nèi)容
點(diǎn)擊鍵盤上的“i”鍵,進(jìn)入編輯狀態(tài) ,如果看到底部出現(xiàn)“插入”兩字,表示成功進(jìn)入編輯狀態(tài),此時(shí)就可以在文件中輸入你想要輸入的內(nèi)容了
輸入想插入的內(nèi)容,輸入完成后點(diǎn)擊鍵盤上的“esc”鍵,退出編輯
輸入:wq,點(diǎn)擊回車,退出并保存
查看剛才是否些文件成功
7.%操作符,#操作符:根據(jù)拓展名切分文件名,“名稱.擴(kuò)展名”
有一些腳本是依據(jù)文件名進(jìn)行各種處理的。我們可能會(huì)需要在保留擴(kuò)展名的同時(shí)修改文件名,轉(zhuǎn)換文件格式或提取部分文件名。
(自己)常用的文本文件的行處理命令
示例文件:test.vcf
1、head -n 10 test.vcf
head : 默認(rèn)是提取文件的前10行,-n 參數(shù)可以設(shè)定選擇文件的前n行
2、tial -n 10 test.vcf
tail : 默認(rèn)是提取文件的末尾10行, -n 參數(shù)可以設(shè)定選擇文件末尾的n行
3、sed -n '10,20p' test.vcf
sed -n : 隨意選擇需要查看的行
sed命令是一個(gè)面向行處理的編輯器,可以和正則表達(dá)式配合使用,附上較全面的sed命令使用教程。
4、awk 截取行的指定長(zhǎng)度字符串
less test.gz |awk '{if(NR%2==1){print}else{print substr($1,1,75)}}' | gzip -c test.part.gz
說明:對(duì)test.gz文件指定行截取75bp,原來是150bp
5、對(duì)n行的第三列求和,求平均值
grep -v ‘#’ test.vcf |sed -n '20,35p' |awk -F '\t' '{sum+=$3;n++}END{print sum,sum/n}'
(linux 一行命令計(jì)算速度比Python快,簡(jiǎn)單計(jì)算喜歡用linux命令)
記得隨時(shí)整理使用過的命令,沒學(xué)過linux,靠著各種帖子,隨時(shí)需要隨時(shí)補(bǔ)給,有點(diǎn)懶。
sed簡(jiǎn)介:流編輯工具,用來對(duì)文本進(jìn)行過濾與替換操作。
sed流程:sed通過一次僅讀取一行內(nèi)容來對(duì)某些指令進(jìn)行處理后輸出。
1、sed通過文件或管道讀取文件內(nèi)容,但sed默認(rèn)并不直接修改源文件,而是將讀入的內(nèi)容復(fù)制到緩沖區(qū)中,稱之為模式空間。
2、所有的指令操作都是在模式空間找那個(gè)進(jìn)行
3、sed根據(jù)相應(yīng)的指令對(duì)模式空間中的內(nèi)容進(jìn)行處理并輸出結(jié)果,默認(rèn)輸出至標(biāo)準(zhǔn)輸出(即屏幕上)。
sed基本語法格式:
用法:sed[選項(xiàng)]...{腳本指令}[輸入文件]...
選項(xiàng): -version 顯示sed版本
-help :顯示幫助文檔
-n,-quiet,-silent靜默輸出,默認(rèn)情況下,sed程序在所有的腳本指令執(zhí)行完畢后,將自動(dòng)打印模式空間中的內(nèi)容。
-e script允許多個(gè)腳本指令被執(zhí)行
-f script-file從文件中讀取腳本指令,對(duì)編寫自動(dòng)化腳本程序很實(shí)用
-i ,-in-place 該選項(xiàng)直接修改源文件
-l N 該選項(xiàng)指定l指令可以輸出的行長(zhǎng)度,l指令為輸出非打印字符。
-posix 禁用GNU sed擴(kuò)展功能。
-r 在腳本指令中使用擴(kuò)展正則表達(dá)式。
-s,-separate 默認(rèn)情況下,sed將把輸入的多個(gè)文件名作為一個(gè)長(zhǎng)的連續(xù)的輸入流。而GNU sed則允許把它們當(dāng)作單獨(dú)的文件。
-u,-unbuffered 最低限度的緩存輸入與輸出
a,append表示追加指令;
i,insert表示插入指令;
d,delete表示刪除指令;
s,substitution表示替換指令。
sed腳本指令的基本格式是:
[地址,即路徑]命令(有些命令僅可以對(duì)一行操作,有些可以對(duì)多行操作),命令也可以用花括號(hào)進(jìn)行組合,使命令序列可以作用于同一個(gè)地址。
address{
command1
command2
command3
}
sed的基本工作方式是:
sed的替換命令s:
1、全局替換 : s/old/new/g ,其中g(shù)為全局替換,用于替換所有出現(xiàn)的次數(shù); /如果和正則匹配的內(nèi)容沖突可以使用其他符號(hào),如 : s@old@new@g
2、標(biāo)志位
為什么要有多行模式: 配置文件一般有單行出現(xiàn),但也有使用json或XML格式的配置文件,為多行出現(xiàn)。
多行模式處理命令N、D、P
新聞名稱:文本處理命令linux 文本處理命令
標(biāo)題來源:http://muchs.cn/article38/hjscsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、全網(wǎng)營(yíng)銷推廣、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)站收錄、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)