Como dividir a saída de um comando pela saída de outro?

4

Eu gostaria de saber a carga do servidor dividida pela quantidade de núcleos da CPU para julgar quais servidores estão sobrecarregados. Eu posso obter a quantidade de núcleos da CPU com:

$ grep -c processor /proc/cpuinfo
2

Eu posso carregar o servidor com:

$ uptime | awk '{print $11}'
0.47,

Agora, gostaria de dividir 0.47/2 para obter 0.23 . Como eu saberia qual página de manual ler para fazer isso? Estou realmente procurando como posso aprender qual é o próximo passo para encontrar o comando correto, não estou pedindo o comando em si.

Eu tentei pesquisar a pergunta on-line e até mesmo o Google não conseguiu me orientar na direção certa. Assim, alternativamente, quais palavras-chave devo pesquisar? O óbvio "linux, division, bash, output" não ajudou.

    
por dotancohen 10.06.2014 / 08:53

4 respostas

5

Isso deve funcionar:

(awk '{printf "%s/", $2}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l

Além disso, você deve obter a carga de /proc/loadavg , onde o comando uptime também a obtém.

    
por 10.06.2014 / 09:06
2

Apenas faça scripts de bash. Obtenha os dois valores para duas variáveis diferentes. Então, usando o comando bc , divida um do outro. Simples assim.

    
por 10.06.2014 / 08:58
1
decimal_places=2
dc  <<< "${decimal_places}k $(uptime | awk '{print $11}'|  cut -d"," -f1) $(grep -c processor /proc/cpuinfo) /p"

Esta resposta usa $() no bash, portanto, nenhuma variável temporária é necessária. Também usa dc, uma calculadora. Nós dc dc a precisão usando k , em seguida, dar-lhe 2 números, em seguida, pedir-lhe para dividi-los e imprimir a resposta.

    
por 10.06.2014 / 13:50
1

Ksh e zsh têm aritmética de ponto flutuante. Outras shells, incluindo o bash, têm apenas aritmética inteira (limitada a 32 bits ou 64 bits).

A página man de cada shell tem uma seção sobre aritmética. Se você quiser cálculos de ponto flutuante, será mais difícil encontrá-lo. A principal maneira de procurar páginas man é o comando apropos , que pesquisa as páginas de uma linha descrições. Já que você está atrás de algo para usar a partir do shell, você quer seção 1. apropos -s 1 float vira nada relevante na minha máquina Linux. O que acaba funcionando é

$ apropos -s 1 calculator
bc (1)               - An arbitrary precision calculator language
dc (1)               - an arbitrary precision calculator

A web tem muito mais recursos para oferecer. Na primeira página do link , localizei Como fazer inteiro & cálculos de flutuação, em bash ou outras linguagens / frameworks? e agora sua pergunta (e também vários tópicos Stack Overflow ). O link fornece vários threads SO, sendo o segundo . Você também pode pesquisar no Unix Stack Exchange que tem uma pergunta marcada com bash e agora também : < a href="https://unix.stackexchange.com/questions/40786/how-to-do-integer-float-calculations-in-bash-or-other-languages-frameworks"> Como fazer inteiro & cálculos de flutuação, em bash ou outras linguagens / frameworks?

Uma escolha comum para cálculos de ponto flutuante ou de números inteiros grandes é bc . É um utilitário clássico do Unix que foi padronizado .

Outro utilitário padrão que pode fazer computação de ponto flutuante e talvez seja mais fácil de começar do que o modelo baseado em precisão da bc é o awk . Enquanto o awk é projetado principalmente para processamento de texto, ele também pode fazer cálculos de ponto flutuante.

    
por 11.06.2014 / 02:10

Tags