DNA採点スクリプトファイル[閉じる]

DNA採点スクリプトファイル[閉じる]

DNA配列のスコアを付けたいです。

A = 1 T = 2 C = 3 G = 4

私の入力は

ATGGCGATTGA  
AGCTTAGCCAG  
AGCTTAGGGAA  

私の出力は

seq_number 1 has score = 28  
seq_number 2 has score = 28  
seq_number 3 has score = 27

編集した私の入力は.txtファイルです。

ベストアンサー1

sed -e 's/A/./g'   -e 's/T/../g' \
    -e 's/C/.../g' -e 's/G/..../g' file |
awk '{ printf("seq_number %d has score = %d\n", NR, length) }'

出力:

seq_number 1 has score = 28
seq_number 2 has score = 28
seq_number 3 has score = 27

このsedコマンドは、各ベースをスコアを表す複数のポイントに置き換えます。このawkコマンドは、これまでに読み取った行数を印刷し、行の総スコアである行の長さを計算します。

最初のsed表現はs/A/./g実際に正確である必要はありません。


バリエーション(面白いと少し短い):

sed -e 's/G/TT/g;s/C/TA/g;s/T/AA/g' file |
awk '{ printf("seq_number %d has score = %d\n", NR, length) }'

1行に1つずつ分数のみを提供するバリアント:

tr 'ATCG' '1234' <file | awk -F'\0' -vOFS="+" '$1=$1' | bc

まず、各文字をその文字の小数に置き換えてから、を使用してawk各数字の間に挿入します。+次に、各行の総点計算を処理しますbc

最後に、最後のもののバリアントですが、合計のみが含まれますsedbc再び分数のみが印刷されます)。

sed 'y/ATCG/1234/;s/\(.\)/+\1/g;s/^+//' file | bc 

サンディップが提案した

sed 'y/ATCG/1234/;s/./+&/2g' file | bc

これは私の最後のものの短い変形です。

まず、コマンドを使用して文字をその数に変更し、y各文字(2番目の文字から始まる)を前の文字自体に置き換えて、入力文字列の+出力を ACCA取得します。その後、この算術式を評価するために使用されます。1+3+3+1bc

sed彼のソリューションは、標準がsedgetとas replacementフラグの両方を好まないため、GNUでのみ機能します2g

おすすめ記事