Somar quantidade a partir de um arquivo [RESOLVIDO]

1. Somar quantidade a partir de um arquivo [RESOLVIDO]

iudemar
iudemar

(usa Slackware)

Enviado em 25/01/2016 - 11:37h

Caros colegas,
Tenho uma pequena dificuldade em soma com shell script, criei um pequeno script que adiciona um arquivo contendo várias linhas com números, tipo:
000000011
000000023
000000005

Uma linha abaixo da outra, contendo apenas números. Algum de vocês por favor, poderia me dar uma ideia de como fazer o script para calcular a soma das linhas, não estou conseguindo e tenho tentado bastante sem grandes avanços.

Grato pela ajuda de todos.


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/01/2016 - 11:38h

iudemar escreveu:

Bom dia Marcelo,

OLha só, joguei o comando que você me passou aqui.. o resultado não deu certo não, veja só:

root@bob:/tmp# paste -s -d + /tmp/soma11.txt |bc | sed -i 's/^M//'
sed: (standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: nenhum arquivo de entradaillegal character: ^M

(standard_in) 1: illegal character: ^M

Seria isso mesmo ou me atrapalhei na linha de comandos?

Grato pela ajuda de vocês.
#########################################################################################################


Bom dia, iudemar.
SIM!!!!
Você se atrapalhou.
paste -s -d + /tmp/soma11.txt |bc | sed -i 's/^M//'
sed -i 's/^M//' no fim do comando não resolve....
O BASH Lê da Esquerda para a Direita , de cima para baixo.... Rsrsrsrs


Antes de rodar qquer comando RETIRE o "^M"
Testei aqui, um arquivo com as linhas terminadas em ^M (padrão DOS/WIN),
apresenta o erro (standard_in) 1: illegal character: ^M

file NUMEROS.txt
NUMEROS.txt: ASCII text, with CRLF line terminators

SIMULANDO o ERRO.

paste -s -d + NUMEROS.txt|bc
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M

TIRANDO o ^M:
sed 's/^M//' NUMEROS.txt|paste -s -d +|bc
55

COMO TIRAR O ^M
Já Expliquei na postagem anterior, mas vamos lá ...
sed -i 's/^M//' NUMEROS.txt 

COPIAR E COLAR NãO FUNCIONA!!!!
Para escrever o ^M FAÇA:
pressione Ctrl-V depois Ctrl-M
PARA FACILITAR, faça:
sed -i 's/.$//' NUMEROS.txt 


Att
Marcelo

3. Re: Somar quantidade a partir de um arquivo

Andre Ribeiro da Costa
andr3ribeiro

(usa Arch Linux)

Enviado em 25/01/2016 - 11:55h

sabe o que é POG?
Programação Orientada a Gambiarra!
kkkk

Você tem uma lista de números, um por linha, e precisa somá-los:

$ cat numeros.txt
3
5
7
9
11
13
15

Primeiro, coloque todos em uma única linha:
$ paste -s numeros.txt
3 5 7 9 11 13 15

Agora mude o delimitador (-d) de TAB para “+”, para compor a expressão aritmética de soma:
$ paste -s -d + numeros.txt
3+5+7+9+11+13+15


Agora sim, basta passar a expressão resultante para a calculadora do shell:
$ paste -s -d + numeros.txt | bc
63


Não sei se ajuda, mas que soma, soma! rs



4. Re: Somar quantidade a partir de um arquivo [RESOLVIDO]

iudemar
iudemar

(usa Slackware)

Enviado em 25/01/2016 - 12:27h

Olá amigo, eu testei essa dica e não funcionou.. até a ultima linha foi quase tudo ok, porém esse bc após o pipe não ta rolando, apresenta erro.

Eu consegui realizar de outra forma, segue o meu script:

#!/bin/bash
rm /tmp/soma.txt
LER=$(ls /home/iuedmar/Downloads/testando)



for i in $LER ;
do
cd /home/iuedmar/Downloads/testando
cat $i >> /tmp/soma.txt | awk '{print $3}' ;

done

############

o problema ai é que dentro de meu arquivo eu tenho 3 campos X Y 000022
O campo dos numeros é o que me interessa. Neste script se eu rodar ./meuscript.sh
ele executa porém não me joga no arquivo apenas o campo 3 que é dos numeros que será realizada a soma, ele joga tudo para dentro de /tmp/soma.txt

Agora se eu executar o comando manualmente cat /tmp/soma.txt | awk '{print $3}'
Ele mostra o que quero que é o campo 3 000022.

Tenho outras linhas abaixo que servem para somar o que meu arquivo soma.txt armazenar, mas antes preciso fazer essa primeira etapa, esse misterio se resolver para poder dar continuidade e colocar em produção.

OBrigado.

Sabe me informar o misterio, pois já não sei o que fazer, obrigado pela ajuda.


5. Re: Somar quantidade a partir de um arquivo [RESOLVIDO]

iudemar
iudemar

(usa Slackware)

Enviado em 25/01/2016 - 13:24h

Quase todos os problemas resolvidos, agora na hora de somar, na etapa final, tenho o seguinte erro:

+ for elemento in '"${VEC[@]}"'
+ echo $'0000000002\r'
0000000002
+ let sum=sum+elemento
")erro de sintaxe: operador aritmético inválido (token com erro é "
+ for elemento in '"${VEC[@]}"'

##########################
Segue a parte da soma:

VEC=(`cat /tmp/soma1.txt`)
sum=0
for elemento in "${VEC[@]}" ;
do
echo $elemento
let sum=sum+elemento
done
echo " "
echo " "
echo " ------------------- A SOMA REALIZADA EH ---------------- "
echo " "
echo “soma = $sum”


Alguma ideia de qual seja o problema?
OBrigado.



6. Somar quantidade a partir de um arquivo

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/01/2016 - 13:32h

Adoro scripts (a unica linguagem proxima a programação que aprendi até o momento) talvez eu possa te ajudar... poste um pedaço do arquivo que sera usado para fazer os calculos !!!.


7. Re: Somar quantidade a partir de um arquivo

Renan Arantes
R3nan

(usa Debian)

Enviado em 25/01/2016 - 14:17h

andr3ribeiro escreveu:

sabe o que é POG?
Programação Orientada a Gambiarra!
kkkk

Você tem uma lista de números, um por linha, e precisa somá-los:

$ cat numeros.txt
3
5
7
9
11
13
15

Primeiro, coloque todos em uma única linha:
$ paste -s numeros.txt
3 5 7 9 11 13 15

Agora mude o delimitador (-d) de TAB para “+”, para compor a expressão aritmética de soma:
$ paste -s -d + numeros.txt
3+5+7+9+11+13+15


Agora sim, basta passar a expressão resultante para a calculadora do shell:
$ paste -s -d + numeros.txt | bc
63


Não sei se ajuda, mas que soma, soma! rs


show! nunca tinha visto o comando paste na pratica muito bom essa forma de solucionar o problema!

siga a dica do amigo andre que vc ira somar bunito os numeros



8. Re: Somar quantidade a partir de um arquivo [RESOLVIDO]

iudemar
iudemar

(usa Slackware)

Enviado em 25/01/2016 - 15:06h

Pessoal,

já tentei usar esse comando mas não rolou não..

Alguém tem alguma dica do que pode ser o erro em relação a saída do comando postado? Essa linha de comandos compartilhado pelo André não rolou, a linha da saída com | bc apresentava problemas e a linha do paste estava duplicando meu arquivo, resumindo, não rola.

Obg


9. Re: Somar quantidade a partir de um arquivo

Renan Arantes
R3nan

(usa Debian)

Enviado em 25/01/2016 - 15:31h

é só usar essa linha


paste -s -d + numeros.txt | bc


substituindo o numeros.txt pelo nome do seu arquivo que contem a lista de números.

verifique tb se vc tem o bc instalado no seu sistema com o comando bc -v


10. Re: Somar quantidade a partir de um arquivo [RESOLVIDO]

iudemar
iudemar

(usa Slackware)

Enviado em 25/01/2016 - 15:37h

Renan,

olha só a saída do comando como fica:

root@bob:/home/maresia/Downloads# paste -s -d + /tmp/soma1.txt | bc
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M
(standard_in) 1: illegal character: ^M


Não sei o que pode ser.



11. Re: Somar quantidade a partir de um arquivo [RESOLVIDO]

iudemar
iudemar

(usa Slackware)

Enviado em 25/01/2016 - 15:39h

dentro do arquivo soma1.txt

tenho as linhas:

0000000002
0000000002
0000000001
0000000000
0000000000
0000000002
0000000002
0000000000
0000000000
0000000000
0000000002
0000000000
0000000000
0000000000
0000000000
0000000002
0000000002
0000000000
0000000002



12. Re: Somar quantidade a partir de um arquivo [RESOLVIDO]

Renan Arantes
R3nan

(usa Debian)

Enviado em 25/01/2016 - 15:40h

cole aqui o conteudo do arquivo soma1.txt






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts