como remover vírgula e seqüências de caracteres após uma vírgula em um arquivo?

1

Eu tenho um arquivo com 10000 linhas e 17 colunas, assim:

Chr17 43633894  0.5 3.0103  2386    14.9269 6.85401 41.0732 42.8984 953 80848   9.41879 24.1244 26  11.961  87.4669 random1_1000
Chr17 45194841  0.401235    16.7362 2626    4.75178 3.2041  58.5842 59.7521 3534    93081   3.2038  59.9018 52  54.6311 3.08007 random1_1000

Em algumas linhas para algumas colunas, eu tenho 2 valores em vez de um que são separados por vírgula "," um do outro, como essa linha (3ª e 4ª colunas, por exemplo):

Chr11 38465225  0.523952,0.5    4.67466,3.0103  2662    4.06441,3.73412 6.21149 53.0049,55.4167 58.8243 7269,408    92146   73.8888,21.1059 46.0485 62,1    4.06441,3.0103  3.8106  MAP_outliers

Eu quero encontrar todas estas vírgulas no meu arquivo, remover vírgula e um valor que vem depois da vírgula, obter uma saída como esta

Chr11 38465225    0.523952    4.67466  2662    4.06441 6.21149 53.0049 58.8243 7269    92146   73.8888 46.0485 62    4.06441  3.8106  MAP_outliers

alguma ideia de como fazer isso?

    
por Anna1364 20.03.2018 / 19:42

2 respostas

1

com awk :

awk '{for (i=1; i<=NF; ++i) {gsub(",[0-9].*", "", $i)}}; 1'
  • for (i=1; i<=NF; ++i) itera sobre os números de campo

  • {gsub(",[0-9].*", "", $i)} substitui tudo depois de uma vírgula seguida por um dígito e, em seguida, qualquer coisa com nulo; esta é uma operação no local

Exemplo:

% awk '{for (i=1; i<=NF; ++i) {gsub(",[0-9].*", "", $i)}}; 1' <<<'Chr11 38465225  0.523952,0.5    4.67466,3.0103  2662    4.06441,3.73412 6.21149 53.0049,55.4167 58.8243 7269,408    92146   73.8888,21.1059 46.0485 62,1    4.06441,3.0103  3.8106  MAP_outliers'
Chr11 38465225 0.523952 4.67466 2662 4.06441 6.21149 53.0049 58.8243 7269 92146 73.8888 46.0485 62 4.06441 3.8106 MAP_outliers
    
por 20.03.2018 / 19:57
2

Usando sed

sed 's/,[^[:blank:]]*//g' infile

Remova a vírgula seguida por qualquer coisa que não seja espaços em branco e todas as correspondências.

    
por 20.03.2018 / 19:52