NGSデータで見つかったバリアントに基づいて、あるコドンシーケンスを別のコドンシーケンスに変換するスクリプトを設定しようとしています。
現在私のスクリプトは、6つの列を持つタブで区切られた出力ファイルを生成します。各列は次を示します。
- 最初:ゲノムの位置
- 第二:ヌクレオチド塩基
- 3番目の場所:コドン
- 第四:コドンのゲノム位置配列
- 5番目:SNP頻度
- 6位:SNPベース
出力データは次のとおりです。
2289 G GTG 3 0.0346505 A
2478 G ATG 2 0.0054087 C
出力ファイルの7列を設定して、4列の番号に基づいてコドンのヌクレオチド配列をSNPヌクレオチド(6列)に変更することは可能ですか?
例えば、
- ゲノム位置2289の場合:
GTGコドンはGTAになります。 SNPヌクレオチドAは、列4に記載されているコドン配列の3番目のヌクレオチド配列を置き換えます。
- ゲノム位置2478の場合
ATGコドンはACGになります。 SNPヌクレオチドCは、コドンの第2のヌクレオチド配列を置き換える。
この操作を使用awk
または実行できますか?sed
答え1
「できるか…」という質問に「はい」と答えるのはあまりにも誘惑的です。
そんなことが起こりますか?
awk '{l=substr($3,1,$4-1); r=substr($3,$4+1); print $0"\t"l $6 r}' genome > mutated
答え2
答え3
いくつかのperl
分割と結合を使用すると、次のようになります。
perl -alne '
@c = split //, $F[2];
splice @c, $F[3]-1, 1, $F[5];
print join "\t", @F, join "", @c;
' data
説明する:
- split 3rd column into character array @c
- replace the value indexed by the 4th column with that of the 6th
- stitch it all back together, delimited by tabs
試験に与えられた
$ cat data
2289 G GTG 3 0.0346505 A
2478 G ATG 2 0.0054087 C
それから
$ perl -alne '
@c = split //,$F[2]; splice @c,$F[3]-1,1,$F[5]; print join "\t",@F,join "",@c
' data
2289 G GTG 3 0.0346505 A GTA
2478 G ATG 2 0.0054087 C ACG
答え4
perl -plane 'substr($F[2],$F[3]-1,1)=$F[5]; $_.="\t$F[2]"' data
- 問題に応じてF2を変更してください。
substr($F[2],$F[3]-1,1)=$F[5]
- 入力ラインに接続して
$_.="\t$F[2]"