2つのファイルがあり、各ファイルには次のヘッダーを含む3つのシーケンス(それぞれ200の長さ)があります。
#File1
>1
TGATTGCATAACCACTTAACATCTTGTTTTATCTAAATAAAATTAAGCATGTTATCTTTTTGGGGCACTCCTGGGGCAGTAGATGCCAGTTGTTGATTCAGTATATCTACTTGTGACTGGTTATTATCCCGATTTTTTTAGTTTTAAGGTGTTGACATAGCCATCCATGCTCCATATACTGTATAGACCATCTGAGCGTT
>2
TGGGAAAACAGCATTCAGCGGTGGCTTATTCCTGCTAAGGATGTTGGCCGCATTCATGCTGAGCACAACCTCGACGGCCTGCTGAGGGGCGATTCGGCATCCCGCGCTGCCTTTATGAAGGCAATGGGAGAGGCAGGGCTACGCACCATCAACGAGATGCGACGAACGGACAACCTCCCGCCATTGCCGGGTGGCGATGT
>3
GAAATGGGAACCGCGAACATGCCTGCACATCCGTTTGTGCGACCCGCTTACGATACTCGCGAGGAAGAGGCCGCCAGCGTCGCCATTGCCAGGATGAATCAGGCTATTGATGAGGTATTGAGCAAGTGAATGAAGATAATATCTACGCCTTGCTTTCTCCCCTGGCAGAAGGACGGGTATATCCCTATGTTGCGCCATTA
#File2
>1
TGATTGCATAACCACTTAACATCTTGTTTTATCTAAATAAAATTAAGCATGTTATCTTTTTGGGGCACTCCTGGGGCAGTAGATGCCAGTTGTTGATTCAGTATATCTACTTGTGACTGGTTATTATCCCGATTTTTTTAGTTTTAAGGTGTTGACATAGCCATCCATGCGGGAAGGTGCAGCATAATGTGCTTTGGATT
>2
TGAGTGCCCCATTTGTGAAGCAATAAAGTTCGGGTTCGCGCCAGCGGCAAGCGCCCAGCATGCACCGATTTTTTTAGTTTTAAGGTGTTGACATTAGGTATGTCGGGACTGGTATGCTTTCCTGTGTCGCAGCCCGGCGCGTCTCAATGCAGATTCCCATATCCTGTTCATCCATATACTGTATAGACCATCTGAGCGTT
>3
TACCTGAGCGATCGGTAATTTGCGGATTGAAGACAAAGGTGCAGGAATGAGTTTTTGTACGACCGTATTCGCGCAGCTTTACTTCAATTTTGTGCTGTTTGCTCAGCTTCGTGAAAGAGGCCTGACTTTTTAAAGCATCAATTGCTGGCTGCACAAGATGTATCACCCTGTCGGTTCCTGCCTGGGTTTTCGGCAGGGTG
file1のすべてのシーケンスをfile2と(ヘッダーに関係なく)比較したい(File1:1,2,3対File2:1,2,3)。正確に30の連続した文字が同じです。これら2つのシーケンスで、一致するシーケンスのタイトル(一致するシーケンスのみ)を出力ファイルに保存したいと思います。
たとえば、30文字の文字列は次のようになります。
TGATTGCATAACCACTTAACATCTTGTTTT
ファイル1のseq1とファイル2のseq1に存在します。
TCCATATACTGTATAGACCATCTGAGCGTT
ファイル1のseq1とファイル2のseq2に存在します。
そのため、次のような出力ファイルが生成されます。
[1,1]
[1,2]
...
答え1
$ cat tst.awk
BEGIN { wid = 30 }
sub(/^>/,"") { hdr=$1; next }
NR == FNR { a[hdr]=$0; next }
{
for ( hdrA in a ) {
strA = a[hdrA]
lgthA = length(strA)
for ( idxA=1; idxA<=(lgthA - wid + 1); idxA++ ) {
substrA = substr(strA,idxA,wid)
if ( index($0, substrA) ) {
printf "[%s,%s]\n", hdrA, hdr
break
}
}
}
}
$ awk -f tst.awk file1 file2
[1,1]
[1,2]