Como extrair informações separadas por um caractere de uma coluna?

1

Eu tenho um arquivo data como este:

head data

19  54240283    .   T   C   .   .   .    188,18:208:14:102:18:189:209:37.7222:37.4681:9:139:9:50:50.8889:40.3545:919.145:640.562:0
1   103020      .   A   C   .   .   .    1,2:3:2:2:2:2:4:38:38:2:2:0:0:46.5:28:0.5:162:0
2   8797402     .   G   A   .   .   .    0,3:3:3:0:3:0:3:38:0:0:3:0:38.3333:840.056:0

As informações mais importantes estão ocultas na 9ª coluna (a mais longa), entre a 4ª e a 6ª : . Por exemplo:

19  54240283    .   T   C   .   .   .    18:189
1   103020      .   A   C   .   .   .    2:2
2   8797402     .   G   A   .   .   .    3:0

Por fim, gostaria de extraí-los e criar novas colunas para eles. Por exemplo,

19  54240283    .   T   C   .   .   .    18    189
1   103020      .   A   C   .   .   .    2     2
2   8797402     .   G   A   .   .   .    3     0

Alguém poderia me ajudar a descobrir como fazer isso? Obrigado!

    
por kin182 13.06.2017 / 23:17

2 respostas

2
Solução

awk :

awk -F'[[:space:]]+|:' '{ print $1,$2,$3,$4,$5,$6,$7,$8,$13,$14 }' data | column -t

A saída:

19  54240283  .  T  C  .  .  .  18  189
1   103020    .  A  C  .  .  .  2   2
2   8797402   .  G  A  .  .  .  3   0
  • -F'[[:space:]]+|:' - espaço (s) em branco e : são considerados como separador de campos
por 13.06.2017 / 23:24
0
perl -pe 's|\d+,(\S+)$|join "\t", (split /:/, $1)[4,5]|e' data

Resultado

19  54240283    .   T   C   .   .   .    18     189
1   103020      .   A   C   .   .   .    2      2
2   8797402     .   G   A   .   .   .    3      0
    
por 13.06.2017 / 23:54