如何在 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 文件的每个标题中附加文件名? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章