paulocez
(usa Outra)
Enviado em 11/09/2020 - 08:33h
msoliver escreveu:
paulocez escreveu:
Boa Tarde!
Gostaria de uma ajuda de profissionais sobre uma questão usando o comando awk para resolver o seguinte problema.
tenho um arquivo texto contendo 3 colunas:
7895555075770;1,0000;40,00
7895555075770;1,0000;84,90
Sendo: EAN, quantidade e valor respectivamente;
Gostaria de eliminar a linha com duplicidade na primeira coluna.. Já consigo fazer isso usando o comando:
awk -F';' '!seen[$1]++' itens.txt >> itens_final.txt
porem isso vai me exclui a segunda linda sem ao mesmo que eu possa somar a quantidade e o valor da terceira coluna.
gostaria de ter no arquivo final com o seguinte resultado:
7895555075770;2,0000;124,90
Isso é possivel meus amigos usando o comando awk?
Boa tarde Paulo, sim , é "quase" possível.....
Exceto pela ","
Que deve ser alterada para ".", senão o awk não faz a soma....
awk -F";" '{gsub(",",".");qtdd+=$2;vlr+=$3;}END{printf "%s;%.4f;%.2f\n" ,$1,qtdd,vlr}' texto.txt
7895555075770;2.0000;124.90
Caso necessário, pode ser contornado com o "sed"...
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________
Bom dia
Obrigado pela ajuda.
Sim me deparei com esse problema de virgula, então usei o comando sed -i s/\,/\./g para converter virgula por ponto.
Ontem eu pesquisei muito por isso e consegui a seguinte expressão
gawk -F ";" -v OFS=";" "{a[$1]+= $2} {b[$1]+= $3;} END{for (i in a) print i, a[i],b[i]/a[i]} " itens.txt > itens1.txt
onde em um arquivo como esse:
7895555075770;2;62.45
7895555075770;2;40.45
7895555075771;2;62.45
obtenho esse
7895555075770;4;25.725
7895555075771;2;31.225
to com 90% do meu problema\a resolvido, porém na anunciação desse tópico eu acabei esquecendo o seguinte:
- Na terceira coluna eu preciso que seja somado a quantidade e depois dividido pela quantidade da segunda coluna.
No script que encontrei ele até faz certinho quando encontra mais de uma linha repetida, porem quando não tem nenhum dado repetido ele divide mesmo assim, como mostra o resultado acima. onde a linha 7895555075771;2;62.45 gostaria que me apresentasse o mesmo resultado, pois não tem outra linha igual, ao invés disso ele divide 62.45 por 2 resultando em 7895555075771;2;31.225.
Conseguiram entender o meu problema?