AWK para dividir a linha um e 2
Depois de algum grep e awk, tenho a seguinte saída.
[root@nalba ~]# mysql -e "show global status like '%innodb_buffer_pool_read%';" | grep s | awk '{print $2}'
835231
2893
Eu simplesmente quero dividir 835231/2893.
No entanto, esses números mudarão toda vez que o comando for executado, então eu só preciso dizer ao awk como dividir as linhas 1 e 2 ou de alguma forma armazená-las em uma variável.
A maioria dos tutoriais online mostra apenas a divisão pela coluna. (awk '{print $ 1 / $ 2) mas isso não funcionará neste caso.
Obrigada por apareceres!
Respostas
Anexe ao seu comando:
| awk '{a=$1; getline; b=$1; print a/b}'
Atualize para evitar a divisão por erro zero:
| awk '{a=$1; getline; b=$1; if(b==0){print "error"} else {print a/b}}'
Resultado:
288,708
Substitua | grep s | awk '{print $2}'por:
| awk '/s/{v[++c]=$2} c==2{print (v[2] ? v[1] / v[2] : "NaN"); exit}'
Armazenar valores na matriz; Dividir no Bloco Final
Se você sabe que sempre haverá exatamente dois valores, ou se você se preocupa apenas com as duas primeiras correspondências, pode armazenar os valores em uma matriz associativa e realizar sua divisão no final. Por exemplo:
test_data="foo 835231\nbar 2893"
echo -e "$test_data" | awk '{ values[NR] = $2 }; END { print values[1] / values[2] }'
Isso rende 288.708.
Se você estiver consultando o banco de dados de qualquer maneira, talvez seja melhor construir uma consulta SQL que peça ao banco de dados para realizar a divisão para você. Nunca mexa nos resultados da consulta diretamente quando você pode fazer com que o banco de dados faça o trabalho para você.