替换 fasta 中的名称
replace names in fasta
我想根据包含新名称的文本文件更改 fasta 文件中的序列名称。我找到了几种方法,但 seqkit
给我留下了很好的印象,无论如何我无法理解 运行。 Replace key with value by key-value file
fasta 文件 seq.fa
看起来像
>BC1
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC
>BC2
TGCATGCATGCATGCATGCATGCATGCATGCATGCATGCG
GCATGCATGCATGCATGCATGCATGCATGCATGCG
>BC3
GCATGCATGCATGCATGCATGCATGCATGCATGCCCCCCC
TGCATGCATGCATG
和 ref.txt
tab delimited
文本文件如
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 部分。 Replace key with value by key-value file
序列名称以制表符分隔,仅替换第二部分。
请教如何调整代码?
期望的结果应该如下所示:用文本文件中的数字 1234
替换 BC1
>1234
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC
>1235
TGCATGCATGCATGCATGCATGCATGCATGCATGCATGCG
GCATGCATGCATGCATGCATGCATGCATGCATGCG
>1236
GCATGCATGCATGCATGCATGCATGCATGCATGCCCCCCC
TGCATGCATGCATG
能否请您尝试以下。
awk '
FNR==NR{
a[]=
next
}
( in a) && /^>/{
print ">"a[]
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[]= ##Creating an array named a whose index is and value is of current line.
next ##next will skip all further statements from here.
} ##Closing BLOCK for FNR==NR condition here.
( in a) && /^>/{ ##Checking condition if of current line is present in array a and starts with > then do following.
print ">"a[] ##Printing > and value of array a whose index is .
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[]=
b[]=++c[]
next
}
( in a) && /^>/{
print ">"a[]"_"b[]
next
}
1
' ref.txt FS="[> ]" seq.fa
不需要 GNU awk 的 awk 解决方案:
awk 'NR==FNR{a[]=;next}
NF==2{=a[]; print ">" ;next}
1' FS='\t' ref.txt FS='>' seq.fa
第一个语句是用制表符分隔文件 ref.txt
.
的内容填充数组 a
第二个语句打印第二个文件 seq.fa
的所有行,其中包含 2 个字段,给定 >
作为字段分隔符。
最后一条语句打印同一文件的所有行。
我想根据包含新名称的文本文件更改 fasta 文件中的序列名称。我找到了几种方法,但 seqkit
给我留下了很好的印象,无论如何我无法理解 运行。 Replace key with value by key-value file
fasta 文件 seq.fa
看起来像
>BC1
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC
>BC2
TGCATGCATGCATGCATGCATGCATGCATGCATGCATGCG
GCATGCATGCATGCATGCATGCATGCATGCATGCG
>BC3
GCATGCATGCATGCATGCATGCATGCATGCATGCCCCCCC
TGCATGCATGCATG
和 ref.txt
tab delimited
文本文件如
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 部分。 Replace key with value by key-value file
序列名称以制表符分隔,仅替换第二部分。
请教如何调整代码?
期望的结果应该如下所示:用文本文件中的数字 1234
BC1
>1234
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC
>1235
TGCATGCATGCATGCATGCATGCATGCATGCATGCATGCG
GCATGCATGCATGCATGCATGCATGCATGCATGCG
>1236
GCATGCATGCATGCATGCATGCATGCATGCATGCCCCCCC
TGCATGCATGCATG
能否请您尝试以下。
awk '
FNR==NR{
a[]=
next
}
( in a) && /^>/{
print ">"a[]
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[]= ##Creating an array named a whose index is and value is of current line.
next ##next will skip all further statements from here.
} ##Closing BLOCK for FNR==NR condition here.
( in a) && /^>/{ ##Checking condition if of current line is present in array a and starts with > then do following.
print ">"a[] ##Printing > and value of array a whose index is .
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[]=
b[]=++c[]
next
}
( in a) && /^>/{
print ">"a[]"_"b[]
next
}
1
' ref.txt FS="[> ]" seq.fa
不需要 GNU awk 的 awk 解决方案:
awk 'NR==FNR{a[]=;next}
NF==2{=a[]; print ">" ;next}
1' FS='\t' ref.txt FS='>' seq.fa
第一个语句是用制表符分隔文件 ref.txt
.
a
第二个语句打印第二个文件 seq.fa
的所有行,其中包含 2 个字段,给定 >
作为字段分隔符。
最后一条语句打印同一文件的所有行。