Limpeza de um banco de dados de genes poluído por caracteres não numéricos, exceto sinais de mais e menos

1

Eu tenho esse banco de dados de genes completamente confuso com valores extra não-alfanuméricos. Isso aconteceu como uma espécie de criptografia para os dados que foram feitos incorretamente e não sei como limpá-los. Eu tentei sed e awk , mas falhei. Esta é uma amostra dos dados, que é uma grande quantidade de documentos:

chr2#@!!~/\/=\^%$74711&&*&127472363@Pos1%%0^^+
chr3#@!!~/\/=\^%$74723&&*&127473530@Pos2%%0^^+
chr1#@!!~/\/=\^%$73530&&*&127474697@Pos3%%0^^+
chr2#@!!~/\/=\^%$17469&&*&127475864@Pos4%%0^^+
chr3#@!!~/\/=\^%$12747&&*&127477031@Neg1%%0^^-
chr5#@!!~/\/=\^%$17477&&*&127478198@Neg2%%0^^-
chr7#@!!~/\/=\^%$74781&&*&127479365@Neg3%%0^^-
chr7#@!!~/\/=\^%$74795&&*&127480532@Pos5%%0^^+
chr1#@!!~/\/=\^%$12748&&*&127481699@Neg4%%0^^-

Os dados limpos devem ser assim:

chr2 74711 127472363 Pos1 0 +
chr3 74723 127473530 Pos2 0 +
chr1 73530 127474697 Pos3 0 +
chr2 17469 127475864 Pos4 0 +
chr3 12747 127477031 Neg1 0 -
chr5 17477 127478198 Neg2 0 -
chr7 74781 127479365 Neg3 0 -
chr7 74795 127480532 Pos5 0 +
chr1 12748 127481699 Neg4 0 -

Como posso fazer isso?

    
por Peter Mortensen 07.10.2018 / 01:40

3 respostas

9

Você pode fazer isso com sed . Algo como segue:

sed 's/[^a-zA-Z0-9+-]/ /g' file | column -tc2

chr2 74711 127472363 Pos1 0 +
chr3 74723 127473530 Pos2 0 +
chr1 73530 127474697 Pos3 0 +
chr2 17469 127475864 Pos4 0 +
chr3 12747 127477031 Neg1 0 -
chr5 17477 127478198 Neg2 0 -
chr7 74781 127479365 Neg3 0 -
chr7 74795 127480532 Pos5 0 +
chr1 12748 127481699 Neg4 0 -
    
por 07.10.2018 / 01:43
7

Com tr , transliterando caracteres do complemento do conjunto desejado para espaços e apertando repetições:

$ tr -sc '[:alnum:][:space:]+-' ' ' < data
chr2 74711 127472363 Pos1 0 +
chr3 74723 127473530 Pos2 0 +
chr1 73530 127474697 Pos3 0 +
chr2 17469 127475864 Pos4 0 +
chr3 12747 127477031 Neg1 0 -
chr5 17477 127478198 Neg2 0 -
chr7 74781 127479365 Neg3 0 -
chr7 74795 127480532 Pos5 0 +
chr1 12748 127481699 Neg4 0 -
    
por 07.10.2018 / 02:05
0

Uma solução awk

awk -F '[^[:alnum:]+-]+' '{$1=$1;print}' file
    
por 07.10.2018 / 16:41