首页 > 解决方案 > 如何在 fasta 文件的每个标题中附加文件名?

问题描述

亲爱的,我有成千上万的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 语言的了解有限,非常感谢任何帮助或建议

标签: pythonrawk

解决方案


一个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

推荐阅读