gpt4 book ai didi

bash - 替换 fasta 中的名称

转载 作者:行者123 更新时间:2023-12-02 03:10:37 25 4
gpt4 key购买 nike

我想根据包含新名称的文本文件更改 fasta 文件中的序列名称。我找到了几种方法,但 seqkit 给人留下了很好的印象,无论如何我无法让它运行。 通过键值文件将键替换为值

fasta 文件 seq.fa 看起来像

>BC1
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC
>BC2
TGCATGCATGCATGCATGCATGCATGCATGCATGCATGCG
GCATGCATGCATGCATGCATGCATGCATGCATGCG
>BC3
GCATGCATGCATGCATGCATGCATGCATGCATGCCCCCCC
TGCATGCATGCATG

ref.txt 制表符分隔文本文件,例如

BC1 1234
BC2 1235
BC3 1236

Git Bash 中使用 siqkit 会通过文件运行,但不会更改名称。

seqkit replace -p' (.+)$' -r' {kv}' -k ref.txt seq.fa --keep-key

我已经习惯了r,并且是bash的新手,找不到错误,但我想我需要调整tab并且_?如示例 https://bioinf.shenwei.me/seqkit/usage/#replace第 7 部分. 通过键值文件将键替换为值 序列名称以制表符分隔,仅替换第二部分。

请教如何调整代码?

期望的结果应如下所示:将 BC1 替换为文本文件中的数字 1234

>1234
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC
>1235
TGCATGCATGCATGCATGCATGCATGCATGCATGCATGCG
GCATGCATGCATGCATGCATGCATGCATGCATGCG
>1236
GCATGCATGCATGCATGCATGCATGCATGCATGCCCCCCC
TGCATGCATGCATG

最佳答案

您可以尝试以下操作吗?

awk '
FNR==NR{
a[$1]=$2
next
}
($2 in a) && /^>/{
print ">"a[$2]
next
}
1
' ref.txt FS="[> ]" seq.fa

说明:为上述代码添加详细说明。

awk '                          ##Starting awk program here.
FNR==NR{ ##FNR==NR is condition which will be TRUE when 1st Input_file named ref.txt will be read.
a[$1]=$2 ##Creating an array named a whose index is $1 and value is $2 of current line.
next ##next will skip all further statements from here.
} ##Closing BLOCK for FNR==NR condition here.
($2 in a) && /^>/{ ##Checking condition if $2 of current line is present in array a and starts with > then do following.
print ">"a[$2] ##Printing > and value of array a whose index is $2.
next ##next will skip all further statements from here.
}
1 ##Mentioning 1 will print the lines(those which are NOT starting with > in Input_file seq.fa)
' ref.txt FS="[> ]" seq.fa ##Mentioning Input_file names here and setting FS= either space or > for Input_file seq.fa here.


编辑:根据OP的评论,需要在输出中添加>1234_1出现次数,因此现在添加以下代码。

awk '
FNR==NR{
a[$1]=$2
b[$1]=++c[$2]
next
}
($2 in a) && /^>/{
print ">"a[$2]"_"b[$2]
next
}
1
' ref.txt FS="[> ]" seq.fa

关于bash - 替换 fasta 中的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57697102/

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