比较两个文件(fasta和txt),如果匹配,则使用来自txt文件的值为fasta标头添加前缀

时间:2016-05-30 13:57:22

标签: awk sed fasta

我想根据参考文本文件中的信息更改我的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为当前标头添加前缀。所以期望的输出是:

output.fasta

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

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

1 个答案:

答案 0 :(得分:3)

$ 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不能包含&