2 つの文字列を 2 つの別々の列として読み込みます。

2 つの文字列を 2 つの別々の列として読み込みます。

遺伝子型データを含むファイルがあります。 2番目の列には、以下のように連結された特定の遺伝的変異の2つの対立遺伝子があります。

rs969931    CA  1.000   2.000   2.000   2.000   2.000   2.000   1.000   1.000
rs2745406   CT  0.000   2.000   2.000   1.000   1.000   2.000   1.000   1.000
rs6939431   AG  0.000   0.000   0.000   0.000   0.000   0.000   1.000   0.000
rs1233427   AG  1.000   2.000   2.000   2.000   2.000   1.000   1.000   1.000
rs1233426   AG  1.000   2.000   2.000   2.000   2.000   1.000   1.000   1.000
rs1233425   GC  1.000   1.999   1.999   2.000   2.000   2.000   1.000   1.000
rs362546    GA  1.000   2.000   2.000   2.000   2.000   1.000   1.000   1.000
rs909968    AG  0.000   2.000   2.000   1.000   1.000   1.000   1.000   1.000
rs909967    GA  1.000   2.000   2.000   2.000   2.000   2.000   1.000   1.000
rs886381    AG  0.000   0.000   0.000   0.000   0.000   0.000   0.000   1.000

対立遺伝子を2つの別々の列として使用して新しいファイルを作成する必要があります。つまり、2番目の列を2つの列に分割する必要があります。以下は希望の出力です。これを達成するために、awkで複数のフィールド区切り文字を指定する方法はありますか?

rs969931    C A  1.000  2.000   2.000   2.000   2.000   2.000   1.000   1.000
rs2745406   C T  0.000  2.000   2.000   1.000   1.000   2.000   1.000   1.000
rs6939431   A G  0.000  0.000   0.000   0.000   0.000   0.000   1.000   0.000
rs1233427   A G  1.000  2.000   2.000   2.000   2.000   1.000   1.000   1.000
rs1233426   A G  1.000  2.000   2.000   2.000   2.000   1.000   1.000   1.000
rs1233425   G C  1.000  1.999   1.999   2.000   2.000   2.000   1.000   1.000
rs362546    G A  1.000  2.000   2.000   2.000   2.000   1.000   1.000   1.000
rs909968    A G  0.000  2.000   2.000   1.000   1.000   1.000   1.000   1.000
rs909967    G A  1.000  2.000   2.000   2.000   2.000   2.000   1.000   1.000
rs886381    A G  0.000  0.000   0.000   0.000   0.000   0.000   0.000   1.000

ベストアンサー1

subこれを行うには、次の機能を使用できますawk

awk 'sub(/./,"& ",$2)1;' file

タブ区切りの出力が必要な場合は、次のものを使用できます。

awk -v OFS="\t" 'sub(/./,"&\t",$2)1;' file

またはさまざまな他のツールから:

  • 真珠

    perl -alne '$F[1]=~s/./$& /; print "@F"' file
    

    またはタブ区切りの出力の場合:

    perl -alne '$F[1]=~s/./$&\t/; print join "\t",@F' file
    
  • 牛に似た一種の栄養sed

    sed -r 's/\S+\s+\S/& /' file
    
  • その他sed

    sed  's/^[[:alnum:]]*[[:blank:]]*./& /' file
    
  • シェル

    while read -r snp nt rest; do 
        printf "%s\t%s\t%s\t%s\n" "$snp" "${nt:0:1}" "${nt:0:1}" "$rest"
    done < file
    

おすすめ記事