Usando o AWK para converter números para 0 ou 1

1

Esta pode ser uma pergunta simples, mas não consigo entender a vida de mim. Eu tenho um arquivo chamado keyout.dat , que se parece com isso:

Title
1
Variable
-999
-999
0.234
0.123
-999
-999
0.555

O arquivo continua assim por 500.000 linhas.

Eu quero criar um novo arquivo em que todos os -999 estejam definidos como 0 e todo o restante esteja definido como 1. Tenho certeza de que é um comando simples, mas estou tendo problemas para imprimir outro arquivo.

Qualquer ajuda seria ótima.

    
por user115657 31.05.2015 / 20:47

3 respostas

3

A comparação em si retorna 0 ou 1, então você pode imprimir isso.

awk '{print $1!=-999;}' file > another_file

Caso você deseje manter linhas não numéricas:

awk '$1!=$1+0 {print $1;next;} {print $1!=-999;}' file > another_file
    
por 31.05.2015 / 21:06
2

Supondo que você deseja que as linhas Title e Variable estejam intactas:

awk '!/Title/&&!/Variable/ { $0 = ($1 != -999) }; 1' keyout.dat

Ou, se as três primeiras linhas do arquivo não forem alteradas:

awk 'NR > 3 { $0 = ($1 != -999) }; 1' keyout.dat
    
por 31.05.2015 / 21:25
1

com awk :

awk '{$0=($0=="-999")?0:1};1' file

Ou você pode usar sed :

sed -e '/^-999$/s/.*/0/' -e '//!s/.*/1/' file
    
por 31.05.2015 / 20:55

Tags