Soma valores com vírgula em diferentes colunas

1

Meu arquivo de entrada é algo como:

x;y;z
1;1,2;1
0;0,5;1
0;0,75;2
4;1,5;2
2;3,55;1

meu awk é: '{if($1>0){print $1";"$2-$3";"}'

minha saída esperada:

1;0,2;
4;-0,5;
2;2,55;

Mas meu arquivo de saída não mostra números com vírgula ...

    
por Marcos Vinicius Nunes 30.08.2018 / 20:03

2 respostas

2

Sua localidade está atrapalhando. Consulte o link

Para o GNU awk, você precisa definir a variável de ambiente POSIXLY_CORRECT e sua variável de ambiente LS_NUMERIC para uma localidade que use vírgula como separador decimal:

POSIXLY_CORRECT=1 LC_ALL=en_DK.utf-8 gawk -F';' '$1+0 > 0 {print $1 FS $2-$3 FS}' file
1;0,2;
4;-0,5;
2;2,55;

Eu uso $1+0 > 0 para evitar a impressão do cabeçalho também. Você também pode usar NR > 1 && $1 > 0

Você também pode usar gawk --posix ou gawk --use-lc-numeric em vez do POSIXLY_CORRECT env var.

    
por 30.08.2018 / 20:20
0

Como alternativa, você pode fazer:

awk -F';' '{ gsub(/,/,".", $0); save=$2-$3; gsub(/\./,",", save) }
           NR>1 && $1{print $1, save, ""}' OFS=';' infile
1;0,2;
4;-0,5;
2;2,55;
  • NR>1 está pulando a primeira linha.
  • $1 encurtado de $1 >0 é usado lá.
  • OFS=';' define o eperator O utput F ield S como ;
por 30.08.2018 / 20:14

Tags