如何在 fasta 文件的每个标题中附加文件名? [关闭]

Posted

技术标签:

【中文标题】如何在 fasta 文件的每个标题中附加文件名? [关闭]【英文标题】:How can I attach in each header of a fasta file the filename? [closed] 【发布时间】:2021-10-26 16:14:19 【问题描述】:

亲爱的,我有成千上万的 fasta 文件。当您打开每个文件时,您会看到如下所示的标题:

>LOC_1_22 # 16427 # 16873 # 1 # ID=1_22;partial=00;start_type=ATG;rbs_motif=GGAG/GAGG;rbs_spacer=5-10bp;gc_cont=0.635
ATGTTCTTTTATTGCCCGAAGACTGGCGGCTTTTACTCTCCAGAGGTACATGGTGAACAAATGCCAGCGG

>LOC_1_23 # 16964 # 18139 # 1 # ID=1_23;partial=00;start_type=ATG;rbs_motif=GGA/GAG/AGG;rbs_spacer=5-10bp;gc_cont=0.651
ATGGCCGCTGACCAATATCATCACGGTGTCCGGGTCCAAGAGATCAATGACGGGACCCGCCCCATTCGCA

我想在每个文件的标题中附加文件名。 想象一下我的文件名是NC_003245 那么我想要这个文件的标题 当我打开文件时看起来像这样

>NC_003245 LOC_1_22 # 16427 # 16873 # 1 # ID=1_22;partial=00;start_type=ATG;rbs_motif=GGAG/GAGG;rbs_spacer=5-10bp;gc_cont=0.635
ATGTTCTTTTATTGCCCGAAGACTGGCGGCTTTTACTCTCCAGAGGTACATGGTGAACAAATGCCAGCGG

>NC_003245 LOC_1_23 # 16964 # 18139 # 1 # ID=1_23;partial=00;start_type=ATG;rbs_motif=GGA/GAG/AGG;rbs_spacer=5-10bp;gc_cont=0.651
ATGGCCGCTGACCAATATCATCACGGTGTCCGGGTCCAAGAGATCAATGACGGGACCCGCCCCATTCGCA

我对 bash/awk 语言的了解有限, 非常感谢任何帮助或建议

【问题讨论】:

我不明白,那它们是 csv 文件吗?您能否提供有关文件结构的更多详细信息 好点他们是fasta文件 你能粘贴文件的截图吗? 我在我的问题中提出的内容与您询问的屏幕截图完全相同 【参考方案1】:

一个awk想法:

awk 'sub(/^>/,"")  $0=">" FILENAME " " $0 1' NC_003245

地点:

sub(/^>/,"") - 如果行中的第一个字符发生替换 (^>),则 sub() 调用被认为是“真”,所以... $0=">" FILENAME " " $0 - 将行重新定义为> + FILENAME + <space> + $0(其余行); FILENAME 是一个 awk 内置变量,其中包含正在处理的当前输入文件的名称 注意: - 由 Ed Morton 每厘米更新一次

这会生成:

>NC_003245 LOC_1_22 # 16427 # 16873 # 1 # ID=1_22;partial=00;start_type=ATG;rbs_motif=GGAG/GAGG;rbs_spacer=5-10bp;gc_cont=0.635
ATGTTCTTTTATTGCCCGAAGACTGGCGGCTTTTACTCTCCAGAGGTACATGGTGAACAAATGCCAGCGG

>NC_003245 LOC_1_23 # 16964 # 18139 # 1 # ID=1_23;partial=00;start_type=ATG;rbs_motif=GGA/GAG/AGG;rbs_spacer=5-10bp;gc_cont=0.651
ATGGCCGCTGACCAATATCATCACGGTGTCCGGGTCCAAGAGATCAATGACGGGACCCGCCCCATTCGCA

要更新源文件,假设使用GNU awk,添加-i inplace

awk -i inplace 'sub(/^>/,"")  $0=">" FILENAME " " $0 1' NC_003245

【讨论】:

这不能回答我的问题,因为我有多个文件。谢谢你的时间@markp-fuso。我非常感谢 您在问题中提供了一个文件名,这就是我要解决的问题,假设您知道如何将多个文件提交给 awk,例如,将您的文件列表提供给 awk,如下所示: awk -i inplace '...' file1 file2 file3 ... fileN,或者如果特定目录中的所有文件awk -i inplace '...' /path/to/files/*【参考方案2】:

如果你在哪里我会用 R 做这样的事情:

假设您的 fasta 位于一个文件夹中,其中只有您想要使用的 fasta:

library(ape)
setwd("path/to/fasta")

for( i in list.files())
  a = read.FASTA(i)
  names(a) = paste(strsplit(i,'\\.')[[1]][1], names(a))
  write.FASTA(a, file = i)

基本上,您可以使用 for 循环通过使用 i 对象调用文件来加载 fasta(使用 ape 包)。然后你只需替换名称。

请小心,因为这可能会覆盖您之前的 fasta。您可以通过更改 write.fasta 参数(使用粘贴)来更改此设置。

让我知道它是否有效

【讨论】:

感谢@elielink 抽出宝贵时间。我赞成这个答案和你的许多其他答案。感谢您的帮助:) @LDT 不客气

以上是关于如何在 fasta 文件的每个标题中附加文件名? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何连接相同 multiFASTA 文件中的序列,然后将结果打印到新的 FASTA 文件?

新手求助:用perl处理fasta文件

如何将人类每个染色体的序列整合到一个fasta文件

如何从大fasta文件中找出自己想要的序列

perl处理fasta文件

如何打开fasta文件