Lê uma coluna de dois caracteres como duas colunas separadas

3

Eu tenho um arquivo com dados genotípicos. A segunda coluna tem ambos os alelos para uma variante genética particular concatenada, como abaixo.

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

Eu preciso criar um novo arquivo com os alelos como duas colunas separadas, ou seja, dividir a segunda coluna em duas colunas. Saída desejada abaixo. Existe uma maneira de especificar vários separadores de campo no awk para conseguir isso?

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
    
por user3745089 30.11.2014 / 16:17

2 respostas

4

Você pode fazer isso usando a função sub em awk :

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

Se você quiser uma saída separada por tabulações, poderá usar:

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

Ou em várias outras ferramentas:

  • Perl

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

    Ou, para saída separada por tabulação:

    perl -alne '$F[1]=~s/./$&\t/; print join "\t",@F' file
    
  • GNU sed

    sed -r 's/\S+\s+\S/& /' file
    
  • Outro sed

    sed  's/^[[:alnum:]]*[[:blank:]]*./& /' file
    
  • Shell

    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
    
por 30.11.2014 / 16:30
1

Use gsub em awk :

awk 'gsub(""," ",$2)1' file

Resultado:

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
    
por 30.11.2014 / 16:26