2013-06-22 33 views
1

我有一個包含多個條目的文件,其中我想替換每個條目的標題。從文本文件中提取線條樣式

文件內容看起來是這樣的:

>gi|215277009|ref|NR_024540.1| Homo sapiens WAS protein family homolog 7 pseudogene (WASH7P), non-coding RNA 
RNARNARNARNARNA 
>gi|389886562|ref|NR_046018.2| Homo sapiens DEAD/H (Asp-Glu-Ala-Asp/His) box helicase 11 like 1 (DDX11L1), non-coding RNA 
MORERNARNARNARNA 
RNARNARNARNARNA 
... 

,我想做出這樣的事情:

>NR_024540 
RNARNARNARNARNA 
>NR_046018 
MORERNARNARNARNA 
RNARNARNARNARNA 

現在我做了,當我在perl運行它正常工作正則表達式(在測試字符串上),但是當我運行以下sed命令(在Ubuntu中)時,沒有任何反應。這個命令有什麼問題?

sed -ri 's/\>[\w\|]+\|ref\|(\w+)\.\d+\|.*/\>\1/g' rna_copy.fa 

回答

2

sed不使用\w\d。你必須改用字符類。

sed -r 's/>[[:alnum:]\|]+\|ref\|([a-zA-Z0-9_]+\.[[:digit:]]).*/> \1/g' 
2

在awk將是這一個更好的工具:

awk -F\| '/^>/{print ">"$4;next}1' test.in 

awk -F\| '/^>/{$0=">"$4}1' test.in 

-F\|設置字段分隔符來|
/^>/執行關於這樣開始的行是塊a >
">"$4僅打印您感興趣的部分,
next跳到下一行,並且
1打印整行。

在第二個,$0=">"$4設置該行;然後打印,因爲1

2

代碼GNU

sed -r 's/.*\|(\w+)\.[0-9]+\|.*/>\1/' file 

 
$sed -r 's/.*\|(\w+)\.[0-9]+\|.*/>\1/' file 
>NR_024540 
RNARNARNARNARNA 
>NR_046018 
MORERNARNARNARNA 
RNARNARNARNARNA 

GNU sed的作品與\w,但\d