Day32-awk分隔符中的“異類”們

????我發(fā)現(xiàn)只要一開始做課題,永遠(yuǎn)不會(huì)少的東西就是問題。
????昨天剛剛總結(jié)了關(guān)于awk如何統(tǒng)計(jì)某列最大最小值的問題,今天又遇到一個(gè)很有意思的awk特例,問題來源于同組同學(xué)。
????她詢問我,有以下的蛋白質(zhì)FASTA文件,她想要提取出標(biāo)題行的第8列信息重新命名標(biāo)題行應(yīng)該怎么做?
????需求如下:

#Raw Data
>Sample||0001||1284267||1285379||mRNA||1||CDS||936861456||1||frame0
Protein Sequence
...

#Results
>936861456
Protein Sequence
...

????我一看,這個(gè)還挺簡(jiǎn)單的,直接awk走起不就完事了嗎?

awk -F"||" '{if($0~/^>/)print ">"$8;else print $0}' fastafile > test.txt

????結(jié)果出來我傻了,標(biāo)題行的編號(hào)去哪兒了?怎么只剩下一個(gè)孤零零的大于號(hào),仿佛在嘲笑我的悲傷無限大……
????最好的老師永遠(yuǎn)是度娘,搜索之后我得知,||這樣的字符在awk中屬于特殊的分隔符,不能夠直接匹配,需要先用單括號(hào)括起來,再加上雙反斜線\\進(jìn)行轉(zhuǎn)義才能夠匹配,于是命令就變成了:

awk -F'\\|\\|' '{if($0~/^>/)print ">"$8;else print $0}' fastafile > test.txt

????這樣總算能夠正常輸出結(jié)果啦,其實(shí)在awk中這樣的特殊分隔符還有很多,例如\<、>、()、\n、\t、&、;、'"、管道符、空格或反引號(hào)等在shell中有特殊意義的字符作為分隔符,那么都要使用雙引號(hào)或者單引號(hào)把它們先包裹起來;還有就是像我今天遇到的這樣多個(gè)特殊字符作為分隔符,例如$^、*、()、[、]?.、|,都要會(huì)用雙反斜線\\進(jìn)行轉(zhuǎn)義,當(dāng)然用兩個(gè)以上的反斜線也是可以的,不過外面一定記得使用單括號(hào)。
????今天又是為awk深深折服的一天,給跪啦!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,717評(píng)論 0 5
  • 基礎(chǔ)命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,221評(píng)論 0 0
  • 轉(zhuǎn)載 原文的排版和內(nèi)容都更加友好,并且詳細(xì),我只是在這里貼出了一部分留作自己以后參考和學(xué)習(xí),如希望更詳細(xì)了解AWK...
    XKirk閱讀 3,372評(píng)論 2 25
  • netstat -tnlp|egrep -i "$1"|awk {'print $7'}|awk -F'/' '{...
    JerichoYu閱讀 1,083評(píng)論 0 0
  • Linux指令中文說明傳送入口 整理自Linux指令中文說明 文本和數(shù)據(jù)進(jìn)行處理的編程語言awk 是一種編程語言,...
    釋閑人閱讀 2,389評(píng)論 1 6

友情鏈接更多精彩內(nèi)容