在文本文件中查找字符串,将由tab分隔的5组字符串替换为第三个字符串

时间:2014-09-25 20:36:04

标签: awk sed

您好我试图转换文本文件:

>ENSG0123456 ENST0234567 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级别没有达到在合理的时间范围内为此问题找到解决方案的水平。有人有建议吗?

2 个答案:

答案 0 :(得分:3)

 awk -F'\t' 'NF > 1{$0=">"$3}1' file 

<强>输出

>ENSP0345678
ENOASDOIJSADJASPDOKPOKASD
ASDOJOIASJDOIJAKDJLKASDJL
ASLDKJLKASJDLKASJDLKJASLK

>ENSP0456789
POIWQELKJLKJASMDNKLSJDLKA
ASPDOILKNSDMNASDLKJSADOIM
POAKSDAMNSADOIHOADPOKSDLK

答案 1 :(得分: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