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

Awk 在文本文件中查找字符串,用第三个字符串替换由tab分隔的5组字符串,awk,sed,Awk,Sed,您好,我正在尝试从以下内容转换文本文件: >ENSG0123456 ENST0234567 ENSP0345678 scaffold999:1234-2345 1 ENOASDOIJSADJASPDOKPOKASD ASDOJOIASJDOIJAKDJLKASDJL ASLDKJLKASJDLKASJDLKJASLK >ENSG0234567 ENST0345678 ENSP0456789 scaffold9999:2345-3456 -1 POIWQELKJLKJASMDNKLS

您好,我正在尝试从以下内容转换文本文件:

>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水平不足以在合理的时间范围内为这个问题找到解决方案。有人有什么建议吗

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

>ENSP0345678
ENOASDOIJSADJASPDOKPOKASD
ASDOJOIASJDOIJAKDJLKASDJL
ASLDKJLKASJDLKASJDLKJASLK

>ENSP0456789
POIWQELKJLKJASMDNKLSJDLKA
ASPDOILKNSDMNASDLKJSADOIM
POAKSDAMNSADOIHOADPOKSDLK
输出

>ENSP0345678
ENOASDOIJSADJASPDOKPOKASD
ASDOJOIASJDOIJAKDJLKASDJL
ASLDKJLKASJDLKASJDLKJASLK

>ENSP0456789
POIWQELKJLKJASMDNKLSJDLKA
ASPDOILKNSDMNASDLKJSADOIM
POAKSDAMNSADOIHOADPOKSDLK

所有这些都可以满足您的需求:

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

或者,假设您只需要肽名称(
ENSP.*
):


所有这些都可以满足您的需求:

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

或者,假设您只需要肽名称(
ENSP.*
):


“修复”每个块中第一行的前导
字符问题。文件前最后1'是什么@Shellter您只需使用
awk'1'文件
就可以编写一个最低限度的正确程序,它将打印文件中的所有记录。所以说“打印当前记录”只是一个简单的说法。作为条件一部分计算的任何非零值表示
true
true
表示打印此记录。脚本可以写成长手
awk'-F\t''NF>1{$0=“>”$3};{print$0}'文件
.tnx upvoting@shellterAh,那么我也应该读一下标题了?该死!对不起,那里暂时失明。很公平,而且是+1。但仍然很奇怪,这是一种非常特殊的格式,我从未在id行中看到过制表符。“修复”了每个块中第一行的前导字符问题。文件前的最后1'是什么@Shellter您只需使用
awk'1'文件
就可以编写一个最低限度的正确程序,它将打印文件中的所有记录。所以说“打印当前记录”只是一个简单的说法。作为条件一部分计算的任何非零值表示
true
true
表示打印此记录。脚本可以写成长手
awk'-F\t''NF>1{$0=“>”$3};{print$0}'文件
.tnx upvoting@shellterAh,那么我也应该读一下标题了?该死!对不起,那里暂时失明。很公平,而且是+1。但仍然很奇怪,这是一种非常特殊的格式,我从未在id行中看到选项卡。