比较两个文件(fasta 和 txt),如果匹配则在 fasta header 前加上 txt 文件中的值
compare two files (fasta and txt), if match then prefix fasta header with value from txt file
我想根据参考文本文件中的信息更改我的 FASTA header。假设我有两个文件:
file1.txt(参考,tab-delimited)
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中对应的header。如果匹配,则在当前 header 前加上来自 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 文件进行比较感到困惑(其中有 headers 和序列列)。任何帮助都会很棒!
$ awk 'NR==FNR{m[">"]=;next} {sub(/^>/,"&"m[[=10=]])} 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 不能包含 &
.
我想根据参考文本文件中的信息更改我的 FASTA header。假设我有两个文件:
file1.txt(参考,tab-delimited)
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中对应的header。如果匹配,则在当前 header 前加上来自 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 文件进行比较感到困惑(其中有 headers 和序列列)。任何帮助都会很棒!
$ awk 'NR==FNR{m[">"]=;next} {sub(/^>/,"&"m[[=10=]])} 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 不能包含 &
.