Tarefa:
sdout the load avg from top in a decimal form like(e.g 0.23)
Solução:
top -b -n 1 | perl -lane 'print "$1.$2" if /load average: (\d+)[,.](\d+)/'
Notas:
Isso recupera a média de carga de 1m. Parece que é isso que você quer, mas você deve declarar isso claramente. Se necessário, o código pode ser facilmente modificado para recuperar as médias de carga ao longo de 5 minutos ou 15 minutos, ou até mesmo todos os três.
Como apontado por @terdon , uptime
pode ser um ponto de partida melhor do que top
em neste caso.
Após as duas primeiras linhas, você obscuramente descreve o que deseja fazer com o resultado. As etapas subseqüentes que você deseja seguir devem ser assunto de novas perguntas.
Em Perl, os números são convertidos automaticamente em strings e vice-versa. Qualquer operação numérica pode ser executada em uma string representando um número. por exemplo. print "$1.$2"+11.11
Pergunta 2:
Esta parte é sobre a segunda questão, que é totalmente não relacionada para a primeira. Eu peço ao OP para postar esta questão separadamente .
How Can I convert the string value to decimal/float/integer ?
Melhor escrito como: Realizando comparações numéricas em strings com Chef 's InSpec .
Solução:
Converta a string em um formato numérico, com to_i
ou to_f
.
Exemplo:
describe command("echo 1.00") do
its("stdout.to_f") { should be < 1.03 }
end
Explicação:
Muito razoavelmente, stdout é tratado como uma string. Também muito razoavelmente, as comparações numéricas exigem que os dois números sejam ... números. Felizmente, a conversão pode ser feita com os métodos úteis de string Ruby: to_i
, to_f
, to_r
e to_c
.