【问题标题】:compare two files (fasta and txt), if match then prefix fasta header with value from txt file比较两个文件(fasta 和 txt),如果匹配,则使用 txt 文件中的值作为 fasta 标头的前缀
【发布时间】:2023-03-13 08:50:02
【问题描述】:

我想根据参考文本文件中的信息更改我的 FASTA 标头。所以说我有两个文件:

file1.txt(参考,制表符分隔)

chr1:100-1000(+)   ORF1_ORF2_
chr2:30-400(-)     ORF2_
chr3:50-4500(+)
chr4:60-800(-)     ORF1_

file2.fasta

>chr1:100-1000(+)
TTTTGAGAGGACTTCTCTGAGAGCTATGCTAGTCATCGAGGGGAAA
>chr2:30-400(-)
GGGGGGAGAGAGATCTCTGAGCTAGTCATCGTAGCTAGTCATGGGG
>chr3:50-4500(+)
ATGCGCGAGCGAGCGCGACGATCATCGTAGCTACAAAAAAAAAAAG
>chr4:60-800(-)
AGTCTAGCTATCGTAGCTGATCGTAGCTAGCTGATCGTAGCTAGTC

我想使用 file1.txt 中的 $1 来识别 file2.fasta 中的相应标头。如果匹配,则在当前标头前加上 file1.txt 中的 $2。所以期望的输出是:

输出.fasta

>ORF1_ORF2_chr1:100-1000(+)
TTTTGAGAGGACTTCTCTGAGAGCTATGCTAGTCATCGAGGGGAAA
>ORF2_chr2:30-400(-)
GGGGGGAGAGAGATCTCTGAGCTAGTCATCGTAGCTAGTCATGGGG
>chr3:50-4500(+)
ATGCGCGAGCGAGCGCGACGATCATCGTAGCTACAAAAAAAAAAAG
>ORF1_chr4:60-800(-)
AGTCTAGCTATCGTAGCTGATCGTAGCTAGCTGATCGTAGCTAGTC

我过去曾使用 awk 来比较两个文件中的列,但是对于如何将文本文件与 fasta 文件(其中有标题和序列而不是列)进行比较,我感到很困惑。任何帮助都会很棒!

【问题讨论】:

  • 为什么会有 python 和 bash 标签?请删除不相关的标签。
  • 哦,来吧。我没有提到 sed 标签,但是你没有使用 sed。请运用大脑和普通礼貌。
  • 我并不是要将问题限制为仅 awk 解决方案(类似问题似乎已通过 sed 等解决,因此使用了标志)。
  • ^^ 同意。我只是匆忙编造了答案。删除了评论,因为它暗示了一种不好的做法......

标签: awk sed bioinformatics fasta


【解决方案1】:
$ awk 'NR==FNR{m[">"$1]=$2;next} {sub(/^>/,"&"m[$0])} 1' file1 file2
>ORF1_ORF2_chr1:100-1000(+)
TTTTGAGAGGACTTCTCTGAGAGCTATGCTAGTCATCGAGGGGAAA
>ORF2_chr2:30-400(-)
GGGGGGAGAGAGATCTCTGAGCTAGTCATCGTAGCTAGTCATGGGG
>chr3:50-4500(+)
ATGCGCGAGCGAGCGCGACGATCATCGTAGCTACAAAAAAAAAAAG
>ORF1_chr4:60-800(-)
AGTCTAGCTATCGTAGCTGATCGTAGCTAGCTGATCGTAGCTAGTC

以上假设 file1 中的 $2 不能包含 &

【讨论】:

  • 这几乎是完美的,除了它将值(ORF1_ 等)放在“>”之前,破坏了标题。我现在正在玩它以尝试改变它(不对其进行后期处理)
  • 我修改它放在>之后。
  • 非常感谢 :) 如果您不介意另一个愚蠢的问题,^ 中的 sub(/^>/ 是什么意思?我试过没有那个(例如,只是/>/),它似乎做同样的事情
  • ^ 是正则表达式字符串开头的元字符。在这种情况下,由于所讨论的字符串是一整行,因此它将> 正则表达式锚定到行的开头。如果这是唯一可能出现> 的地方,那么您就不需要它。等效的字符串结尾元字符是 $,通常用于行尾匹配,尤其是在 sed 和 grep 中,因为它们是面向行的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多