将两个文件中的 N 个相同连续字符与序列进行比较

将两个文件中的 N 个相同连续字符与序列进行比较

我有两个文件,每个文件有 3 个序列(每个序列 200 个长度),标题如下:

#File1

>1  
TGATTGCATAACCACTTAACATCTTGTTTTATCTAAATAAAATTAAGCATGTTATCTTTTTGGGGCACTCCTGGGGCAGTAGATGCCAGTTGTTGATTCAGTATATCTACTTGTGACTGGTTATTATCCCGATTTTTTTAGTTTTAAGGTGTTGACATAGCCATCCATGCTCCATATACTGTATAGACCATCTGAGCGTT  
>2  
TGGGAAAACAGCATTCAGCGGTGGCTTATTCCTGCTAAGGATGTTGGCCGCATTCATGCTGAGCACAACCTCGACGGCCTGCTGAGGGGCGATTCGGCATCCCGCGCTGCCTTTATGAAGGCAATGGGAGAGGCAGGGCTACGCACCATCAACGAGATGCGACGAACGGACAACCTCCCGCCATTGCCGGGTGGCGATGT  
>3  
GAAATGGGAACCGCGAACATGCCTGCACATCCGTTTGTGCGACCCGCTTACGATACTCGCGAGGAAGAGGCCGCCAGCGTCGCCATTGCCAGGATGAATCAGGCTATTGATGAGGTATTGAGCAAGTGAATGAAGATAATATCTACGCCTTGCTTTCTCCCCTGGCAGAAGGACGGGTATATCCCTATGTTGCGCCATTA
#File2

>1  
TGATTGCATAACCACTTAACATCTTGTTTTATCTAAATAAAATTAAGCATGTTATCTTTTTGGGGCACTCCTGGGGCAGTAGATGCCAGTTGTTGATTCAGTATATCTACTTGTGACTGGTTATTATCCCGATTTTTTTAGTTTTAAGGTGTTGACATAGCCATCCATGCGGGAAGGTGCAGCATAATGTGCTTTGGATT  
>2  
TGAGTGCCCCATTTGTGAAGCAATAAAGTTCGGGTTCGCGCCAGCGGCAAGCGCCCAGCATGCACCGATTTTTTTAGTTTTAAGGTGTTGACATTAGGTATGTCGGGACTGGTATGCTTTCCTGTGTCGCAGCCCGGCGCGTCTCAATGCAGATTCCCATATCCTGTTCATCCATATACTGTATAGACCATCTGAGCGTT  
>3  
TACCTGAGCGATCGGTAATTTGCGGATTGAAGACAAAGGTGCAGGAATGAGTTTTTGTACGACCGTATTCGCGCAGCTTTACTTCAATTTTGTGCTGTTTGCTCAGCTTCGTGAAAGAGGCCTGACTTTTTAAAGCATCAATTGCTGGCTGCACAAGATGTATCACCCTGTCGGTTCCTGCCTGGGTTTTCGGCAGGGTG  

我想比较 file1 与 file2 中的每个序列(不考虑标头)(File1: 1,2,3 vs 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]

相关内容