gpt4 book ai didi

unix - 删除 FASTA 文件中的换行符

转载 作者:行者123 更新时间:2023-12-02 03:36:34 41 4
gpt4 key购买 nike

我有一个 fasta 文件,其中序列用换行符分隔。我想删除换行符。这是我的文件的示例:

>accession1
ATGGCCCATG
GGATCCTAGC
>accession2
GATATCCATG
AAACGGCTTA

我想把它转换成这样:

>accession1
ATGGCCCATGGGATCCTAGC
>accession2
GATATCCATGAAACGGCTTA

我找到了一个潜在的解决方案on this site ,看起来像这样:

cat input.fasta | awk '{if (substr($0,1,1)==">"){if (p){print "\n";} print $0} else printf("%s",$0);p++;}END{print "\n"}' > joinedlineoutput.fasta

但是,这会在每个条目之间放置一个额外的换行符,因此文件如下所示:

>accession1
ATGGCCCATGGGATCCTAGC

>accession2
GATATCCATGAAACGGCTTA

我是 awk 菜鸟,但我尝试修改命令。我的猜测是 if (p){print "\n";} 是罪魁祸首......可能 print "\n" 添加了两个换行符。我不知道如何添加一个换行符...这可能很简单,但就像我说的,我是一个菜鸟。这是我的(不成功的)解决方案:

awk '{if (substr($0,1,1)==">"){print "\n"$0} else printf("%s",$0);p++;}END{print "\n"}' input.fasta > joinedoutput.fasta

但是,这会在文件开头添加一个空行,因为它总是在打印第一个入藏号之前打印一个新行:

{empty line} 
>accession1
ATGGCCCATGGGATCCTAGC
>accession2
GATATCCATGAAACGGCTTA

有人有办法让我的文件格式正确吗?谢谢!

最佳答案

这个awk程序:

% awk '!/^>/ { printf "%s", $0; n = "\n" } 
/^>/ { print n $0; n = "" }
END { printf "%s", n }
' input.fasta

将产生:

>accession1
ATGGCCCATGGGATCCTAGC
>accession2
GATATCCATGAAACGGCTTA

说明:

在不以 > 开头的行上,打印不带换行符的行并存储换行符(在变量 n 中)供以后使用。

在以 > 开头的行上,打印存储的换行符(如果有)和该行。重置 n,以防这是最后一行。

如果需要,以换行符结尾。

注意:

By default, variables are initialized to the empty string. There is no need to explicitly "initialize" a variable in , which is what you would do in and in most other traditional languages.

--6.1.3.1 Using Variables in a Program , The GNU Awk User's Guide

关于unix - 删除 FASTA 文件中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15857088/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com