Como modificar três colunas para apenas uma delas tendo 0 o resto a 1?

0

Digamos que eu tenha uma tabela de dados confusa assim:

Name     IsBuyer IsBidder IsAdmin
person1  1       1        0
person2  1       0        1
person3  1       1        1
.
.

As três colunas IsBuyer, IsBidder, IsAdmin podem ser verdadeiras ou falsas. Mas apenas uma das colunas pode ser verdadeira.

Como escrever um script usando sed, awk ou outra ferramenta baseada em UNIX / Linux para modificar a tabela assim?

    
por Cobol Tikal 05.07.2017 / 11:00

1 resposta

0

Digamos que você tenha esse arquivo chamado, por exemplo, users.txt e você só quer consertá-lo para que seu aplicativo seja iniciado e permita que você examine e calcule a situação; você pode definir apenas IsBuyer para 1 e IsBidder e IsAdmin para 0 .

Escolha seu sabor entre awk e perl :

awk 'NR==1; /person/ && $2+$3+$4>1 {print $1 " 1 0 0"}' users.txt

perl -lape 'if (/person/ && $F[1]+$F[2]+$F[3]>1) {$_="$F[0] 1 0 0"}' users.txt

Uma abordagem um pouco mais sofisticada seria definir apenas IsBuyer para 1 se fosse encontrado 1 , ou seja, inverter os valores para 0 , mas nunca inverter os valores para 1 . É claro que não faço ideia se isso faria sentido em sua situação, pois depende do tipo de corrupção de dados que ocorreu.

    
por 11.07.2017 / 16:45