2014-09-25 71 views
0

你好我嘗試到一個文本文件,從這個轉換:查找字符串,更換5套由製表與第三個字符串分隔的字符串

>ENSGENST0234567 ENSP0345678 scaffold999:1234-2345 1 
ENOASDOIJSADJASPDOKPOKASD 
ASDOJOIASJDOIJAKDJLKASDJL 
ASLDKJLKASJDLKASJDLKJASLK 

>ENSG0234567 ENST0345678 ENSP0456789 scaffold9999:2345-3456 -1 
POIWQELKJLKJASMDNKLSJDLKA 
ASPDOILKNSDMNASDLKJSADOIM 
POAKSDAMNSADOIHOADPOKSDLK 

要這樣:

>ENSP0345678 
ENOASDOIJSADJASPDOKPOKASD 
ASDOJOIASJDOIJAKDJLKASDJL 
ASLDKJLKASJDLKASJDLKJASLK 

>ENSP0456789 
POIWQELKJLKJASMDNKLSJDLKA 
ASPDOILKNSDMNASDLKJSADOIM 
POAKSDAMNSADOIHOADPOKSDLK 

我的水平的awk/sed不在我可以在合理的時間內爲這個問題提出解決方案的水平。任何人都有建議?

回答

1

所有這些都將做你想要什麼:

awk -F"\t" '/>/{printf ">%s\n",$3; next}1;' file.fa 

perl -F"\t" -lane '/>/ ? print ">$F[2]" : print' file.fa 

或者,假設你只想要肽名(ENSP.*):

perl -pe 's/>.*(ENSP.+?)\s.*$/>\1/' file.fa 
3
awk -F'\t' 'NF > 1{$0=">"$3}1' file 

輸出

>ENSP0345678 
ENOASDOIJSADJASPDOKPOKASD 
ASDOJOIASJDOIJAKDJLKASDJL 
ASLDKJLKASJDLKASJDLKJASLK 

>ENSP0456789 
POIWQELKJLKJASMDNKLSJDLKA 
ASPDOILKNSDMNASDLKJSADOIM 
POAKSDAMNSADOIHOADPOKSDLK 
+0

「固定」每個塊中第一行的前導'>'char問題。 – shellter 2014-09-25 20:50:17

+0

文件前的最後1'是什麼? @shellter – josifoski 2014-09-25 21:05:28

+0

你可以用'awk'1'文件'寫一個最低限度正確的程序,它會打印文件中的所有記錄。所以它只是簡單地說「打印當前記錄」。任何作爲條件一部分評估的非零值意味着「真」,而「真」意味着打印此記錄。該腳本可以寫成長手'awk'-F \ t''NF> 1 {$ 0 =「>」$ 3}; {print $ 0}'文件'。 – shellter 2014-09-25 21:14:18