두 파일의 N개의 동일한 연속 문자를 시퀀스와 비교

두 파일의 N개의 동일한 연속 문자를 시퀀스와 비교

두 개의 파일이 있는데 각 파일에는 다음 헤더가 포함된 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개의 연속된 문자가 동일합니다.이 두 시퀀스에서 일치하는 시퀀스의 제목(일치하는 시퀀스만)을 출력 파일에 저장하고 싶습니다.

예를 들어 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]

관련 정보