同じトピックを削除し、awkの他のすべての行に影響を与える方法

同じトピックを削除し、awkの他のすべての行に影響を与える方法

2つのDNA配列(同じ塩基数を含む)を含むファイルがあります。

>seq1
NNNNNAGAATGGGTGANNATTTCCCNN
>seq2
NNAGGGTCCCAATCCNNAACCTTNNNN

N1つまたは2つのシーケンスからaを含む位置を削除したいと思います。この例では、結果は次のようになります。

>seq1
AGAATGGGTGATTTC
>seq2
GTCCCAATCCACCTT

これまでに書いてきましたが、シーケンスを1つずつ削除しましたN

awk '/^>/ {printf("%s%s\t",(N>0?"\n":""),$0);N++;next;} {printf("%s",$0);} END {printf("\n");}' < input | sed 's/N//g' | tr "\t" "\n" > output

これを行う方法を知っている人はいますか?

生物学的背景:FASTAフォーマットは、テキストファイルにDNA配列を作成する方法を設計します。最初の行は記号で始まるシーケンス名です>。 2行目はDNA配列そのものです。私の場合は2つのシーケンスがあるので、4つの行があります。

ベストアンサー1

簡単な方法は次のとおりです。

#!/bin/sh
awk '
    function strip( n ) {
            i = index(body[n], "N")
            while ( i > 0 ) {
                    body[1] = substr(body[1], 0, i-1) substr(body[1], i+1)
                    body[2] = substr(body[2], 0, i-1) substr(body[2], i+1)
                    i = index(body[n], "N")
            }
    }

    /^>/ { 
            N++
            label[N] = $0
            next
    }
    {
            body[N] = $0
    }
    END {
            if ( N != 2 ) {
                    print "Incorrect number of entries" >"/dev/stderr"
                    exit 1
            }
            strip(1)
            strip(2)
            print label[1]
            print body[1]
            print label[2]
            print body[2]
    }
' dna >output

ファイルDNAは次のとおりです。

>seq1
NNNNNAGAATGGGTGANNATTTCCCNN
>seq2
NNAGGGTCCCAATCCNNAACCTTNNNN

ファイル出力は次のとおりです。

>seq1
AGAATGGGTGATTTC
>seq2
GTCCCAATCCACCTT

私はこれがあなたの要件を満たしていると思います。

おすすめ記事