hapmapデータセットの文字を置き換える

hapmapデータセットの文字を置き換える

私のデータに関連する次の問題を解決するためにbashコードを使用するつもりです。

hapmap形式の次のデータセットを考慮すると、「対立遺伝子」列のデータに基づいて一部の文字(この場合は文字)を置き換える必要があります。対立遺伝子列のデータは、4つの文字ペア(A、G、C、およびT)の組み合わせです。

rs#    alleles  chro    pos    ind1 ind2 ind3 ind4 ind5 ind6. . 
mar_1   G/T     1       2386806 G    T    T    G   K    T    
mar_2   T/G     1       2386848 T    G    T    K   T    K
mar_3   G/T     1       2387553 T    K    G    K   T    G
mar_4   G/A     1       2564608 G    G    G    N   R    A
mar_5   C/T     1       2564616 C    Y    C    Y   T    N
.
.

私が得たいのは、行全体を通過するコードです(行1の場合)。文字「T」(「/」の後の文字)が見つかった場合は、文字「G」(文字の前の文字)が文字「R」、「Y」、「S」、「W」、「K」、または「M」を見つけた場合「T」(「/」の後の文字)に置き換えます。 。

つまり、コードは(各行で)「/」の後の文字(「対立遺伝子」列で)に一致するすべての文字を見つけ、「/」の前の文字と一致する文字に置き換える必要があります。そして、「R」、「Y」、「S」、「W」、「K」、または「M」)のいずれかに一致する文字を見つけると、それを一致する文字に置き換える必要があります。 "/"次のもの。

私が得たい結果は次のとおりです。

rs#    alleles  chro    pos    ind1 ind2 ind3 ind4 ind5 ind6. . 
mar_1   G/T     1       2386806 G    G    G    G   T    G    
mar_2   T/G     1       2386848 T    T    T    G   T    G
mar_3   G/T     1       2387553 G    T    G    T   G    G
mar_4   G/A     1       2564608 G    G    G    N   A    G
mar_5   C/T     1       2564616 C    T    C    T   C    N
.
.

注:「N」は欠落している値を示すため、そのままにしてください。

この問題に関連する支援をいただきありがとうございます。

ベストアンサー1

そしてperl

$ perl -F'\s+|/' -lape '
     s/^(\S+\s+){4}\K.*/$&=~s|$F[2]|$F[1]|gr/e;
     s/^(\S+\s+){4}\K.*/$&=~s|[RYSWKM]|$F[2]|gr/e
  ' ip.txt
rs#    alleles  chro    pos    ind1 ind2 ind3 ind4 ind5 ind6. . 
mar_1   G/T     1       2386806 G    G    G    G   T    G    
mar_2   T/G     1       2386848 T    T    T    G   T    G
mar_3   G/T     1       2387553 G    T    G    T   G    G
mar_4   G/A     1       2564608 G    G    G    N   A    G
mar_5   C/T     1       2564616 C    T    C    T   C    N
  • -F'\s+|/'/入力行をスペースまたは文字に分割して@F配列に保存
  • ^(\S+\s+){4}\K.*最初の4つを除くすべての列を取得します。
  • $&=~s|$F[2]|$F[1]一致する部分に対して別の交換を実行します(最初の4列を除く)。
    • $F[2]後ろの文字を含み/$F[1]前の文字を含めます。/
  • 修飾子はr置換された最終文字列を返し、修飾子eは代替部分でPerlコードの使用を許可します。
  • 同じパターンが再利用されるため、2番目の交換も次のように短縮できます。s//$&=~s|[RYSWKM]|$F[2]|gr/e
  • バラよりコマンドスイッチ-lapeオプションの説明

おすすめ記事