シーケンスファイルがあり、連続する文字「N」の数とその文字の発生位置と長さを計算しようとしています。mySequence.fasta
ファイル名は次のとおりです。
>sequence-1
ATCGCTAGCATNNNNNNNNNNNNNNCTAGCATCATGCNNNNNNATACGCATCACANNNNNNNNNCgcatATCAC
期待される出力は次のようになります。
Position 12 N 14
Position 38 N 6
Position 56 N 9
awk
sed
私のファイル名を提供または提供してこの問題を解決するのに役立ちます。mySequence.fasta
ベストアンサー1
これに非常に便利なawk
設定match()
とRSTART
変数を使用してこれを行うことができます。RLENGTH
<mySequence.fasta awk -v C=N '{
i=0
while (match($0, C "+")) {
printf "Position %d %s %d\n", i+RSTART, C, RLENGTH
i += RSTART+RLENGTH-1
$0 = substr($0, RSTART+RLENGTH)
}}'
または と配列をperl
使用して、試合の開始と終了を記録します。@-
@+
perl -ne 'printf "Position %d N %d\n", $-[0]+1, $+[0]-$-[0] while /N+/g'
もう少し高速な別の方法(少なくとも私のバージョンではperl
)perl
は(実験的)(?{...})
正規表現演算子:
perl -ne '0 while /N(?{$s=pos})N*(?{printf "Position %d N %s\n", $s, pos()-$s+1})/g'