2つのDNA配列(同じ塩基数を含む)を含むファイルがあります。
>seq1
NNNNNAGAATGGGTGANNATTTCCCNN
>seq2
NNAGGGTCCCAATCCNNAACCTTNNNN
N
1つまたは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
私はこれがあなたの要件を満たしていると思います。