将序列连接到fasta文件中的ID

时间:2019-06-10 22:36:36

标签: awk

这是我的输入文件

>OTU1;size=4;
ATTCCGGGTTTACT
ATTCCTTTTATCGA
ATC
>OTU2;size=10;
CGGATCTAGGCGAT
ACT
>OTU3;size=5;
ATTCCCGGGATCTA
ACTTTTC

预期的输出文件是:

>OTU1;size=4;ATTCCGGGTTTACTATTCCTTTTATCGAATC
>OTU2;size=10;CGGATCTAGGCGATACT
>OTU3;size=5;ATTCCCGGGATCTAACTTTTC

我已经尝试过Remove line breaks in a FASTA file中的代码

但是这对我不起作用,我不确定如何修改该帖子中的代码... 有什么建议吗?提前致谢!

4 个答案:

答案 0 :(得分:2)

$ awk '{printf "%s%s", (/^>/ ? ors : ""), $0; ors=ORS} END{print ""}' file
>OTU1;size=4;ATTCCGGGTTTACTATTCCTTTTATCGAATC
>OTU2;size=10;CGGATCTAGGCGATACT
>OTU3;size=5;ATTCCCGGGATCTAACTTTTC

答案 1 :(得分:2)

这是另一个awk脚本。使用awk内部解析机制。

awk 'BEGIN{RS=">";OFS="";}NR>1{$1=$1;print ">"$0}' input.txt

输出为:

>OTU1;size=4;ATTCCGGGTTTACTATTCCTTTTATCGAATC
>OTU2;size=10;CGGATCTAGGCGATACT
>OTU3;size=5;ATTCCCGGGATCTAACTTTTC

说明:

awk '
BEGIN {        # initialize awk internal variables
  RS=">";      # set `RS`=record separator to `>`
  OFS="";      # set `OFS`=output field separator to empty string.
}
NR>1 {         # handle from 2nd record (1st record is empty).
  $1=$1;       # regenerate the output line
  print ">"$0  # print out ">" with computed output line
}' input.txt

答案 2 :(得分:1)

请您也可以尝试以下方法。

awk -v RS=">" 'NR>1{gsub(/\n/,"");print ">"$0}'  Input_file

我最初的尝试是awk -v RS=">" -v FS="\n" -v OFS="" 'NF>1{$1=$1;print ">"$0}' Input_file,但后来我看到它已经被回答,所以写了另一个(首先提到的)。

答案 3 :(得分:0)

类似于我的回答here

$ awk 'BEGIN{RS=">"; FS="\n"; ORS=""}
       (FNR==1){next}
       { name=$1; seq=$0; gsub(/(^[^\n]*|)\n/,"",seq) }
       { print ">" name seq }' file1.fasta file2.fasta file3.fasta ...