
Estou tentando analisar um arquivo html para alguns valores usando o bash. Então, eu tenho um grande arquivo de texto com números como este
3
2
4
2
O que eu quero fazer é pegar duas linhas, multiplicar os dois números e depois armazenar o valor em uma variável e adicioná-lo ao total. Neste caso seria 3*2=6
e 4*2=8
. Então .X=0, X=X+6, X=X+8
X=14
Responder1
Tentar
xargs -n2 < file | while read x y; do ((X+=x*y)); echo $X; done
xargs -n2
: agrupa números em paresread x y
: armazena o primeiro e o segundo número em variáveisx
ey
((...))
é apenas uma avaliação aritmética no bash
Você verá na tela como a soma está crescendo.
Responder2
Você pode usar paste
e bc
fazer o que quiser:
$ paste -d"*" - - <file.txt | paste -d"+" - - | bc
14
Discriminação
Aqui podemos ver que paste
está pegando 2 de cada vez e colocando um sinal de multiplicação entre eles.
$ paste -d"*" - - <file.txt
3*2
4*2
Uma abordagem semelhante pode ser usada para incluir os sinais de multiplicação:
$ paste -d"*" - - <file.txt | paste -d"+"
3*2+4*2
Finalmente, a string finalizada pode ser passada para bc
realizar as operações matemáticas.
$ paste -d"*" - - <file.txt | paste -s -d'+' | bc
14
O uso de paste
nos comandos acima varia. Ao realizar a fusão das linhas para formar o X*Y, dizemos ao paste para pegar 2 linhas (denotadas como travessões:) - -. No segundo caso, estamos usando paste
toda a série de caracteres e incorporando um +entre cada átomo.
Responder3
Aqui está uma awk
solução (assumindo um número par de linhas)
awk '{y=$0; getline x; var += x*y};END{print var}' file.txt