Alterando o sinal (+ ou -) de um número com base em colunas não correspondentes

1

Estou tendo um problema com um script do awk que provavelmente deve ser bem simples.

Eu tenho arquivos que se parecem com isso, que têm milhares de linhas, com colunas 2 e 3 consistindo de G, C, T e A; e 4,5,6 numéricos (apenas a coluna 4 tem valores negativos):

ID A1 A2  BETA  SE     P
1  A  T   0.01  0.001  0.2
2  G  G   0.02  0.003  0.4
3  C  T  -0.02  0.005  0.1
4  T  T  -0.01  0.006  0.2

O que pretendo fazer é alterar o sinal do número (positivo para negativo e vice-versa) na coluna 4, se as colunas 2 e 3 não corresponderem. Então, o resultado deve ser assim:

ID A1 A2  BETA  SE     P
1  A  T  -0.01  0.001  0.2
2  G  G   0.02  0.003  0.4
3  C  T   0.02  0.005  0.1
4  T  T  -0.01  0.006  0.2

Minha tentativa de fazer isso é com o awk:

awk '{if($2 != $3 print $0}'

O que percebo não é um grande começo para um problema simples, mas não consigo descobrir como alterar + para - e vice-versa de uma só vez.

Uma solução seria ótima, com passos sobre como funciona ainda melhor!

    
por Asfound 23.09.2015 / 15:58

1 resposta

3

Use awk :

awk 'NR!=1&&$2!=$3{$4=$4*-1};1' file
  • Se a condição $2!=$3 for verdadeira e não for a primeira linha ( NR!=1 ), multiplique o valor de $4 por -1 .

Se você quiser colunas fixas, use novamente column :

awk 'NR!=1&&$2!=$3{$4=$4*-1};1' file | column -t
  • O -t sinalizador de column determina o número da coluna e cria uma tabela.

Saída:

ID  A1  A2  BETA   SE     P
1   A   T   -0.01  0.001  0.2
2   G   G   0.02   0.003  0.4
3   C   T   0.02   0.005  0.1
4   T   T   -0.01  0.006  0.2
    
por 23.09.2015 / 16:08