Jak zaokrąglić output z polecenia awk

Mam takie polecenie, które ma za zadanie pokazać aktualne obciążenie procesora. Problem polega na tym, że polecenie wypluwa wynik z kilkoma miejscami po przecinku, a chciałbym, aby wynik był zaokrąglony do liczby całkowitej, albo przynajmniej max 2 miejsc po przecinku.

Całe polecenie wygląda tak:
awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else print ($2+$4-u1) * 100 / (t-t1) "%"; }' <(grep 'cpu ' /proc/stat) <(sleep 0.5;grep 'cpu ' /proc/stat)

#edit
Ok, już sobie poradziłem :slight_smile:
Użyłem metody int i ładnie zaokrągliło do liczby całkowitej.

Jak chcesz mieć kilka miejsc po przecinku to chyba najprościej skorzystać z funkcji sprinf w awk

echo 12.4394235 | awk  '{ rounded = sprintf("%.2f", $1); print rounded }'
12.44
1 polubienie

Sprawdziłem i faktycznie działa :slight_smile: Póki co zostanę przy liczbie całkowitej, ale dobrze wiedzieć, że jest taka funkcja.

Gdyby, ktoś nie wiedział, a chciał skorzystać to zostawię dla potomnych.

Wykorzystanie CPU pokazane jako liczba całkowita:
awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else print int(($2+$4-u1) * 100 / (t-t1)) "%"; }' <(grep 'cpu ' /proc/stat) <(sleep 0.5;grep 'cpu ' /proc/stat)

No i do dwóch miejsc po przecinku:
awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else printf("%.2f\n", ($2+$4-u1) * 100 / (t-t1)); }' <(grep 'cpu ' /proc/stat) <(sleep 0.5;grep 'cpu ' /proc/stat)

To można jeszcze uprościć wykorzystując tylko jedno wywołanie awk
awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else printf("%.2f\n", ($2+$4-u1) * 100 / (t-t1)); }' <(grep 'cpu ' /proc/stat) <(sleep 0.5;grep 'cpu ' /proc/stat)

1 polubienie

Możesz wpisać dowolny tekst;;
for i in $(seq $(getconf _NPROCESSORS_ONLN)); do yes > /dev/null & done
yes, uj jajec itd :slight_smile:
Copy -paste to to drugie
Delikatne niezrozumienie. ale może komuś się przyda,.

No tak, ale nie zwróci to obciążenia CPU w postaci jednej wartości, tylko wypisze kolejno dla każdego rdzenia, zgadza się?

Edytowałem odpowiedź i dodałem Twoje rozwiązanie. Dzięki jeszcze raz.