Чтение вновь созданного файла.txt с помощью скрипта bash

Ваша проблема в том, что извлеченное поле использует запятую в качестве десятичного разделителя, а awk ожидает, что числа с плавающей запятой будут использовать точку.

Это воспроизводит вашу проблему:

$ LC_ALL=de_DE top -bn 1 | awk 'NR==1'
top - 08:37:07 up 1 day, 10:22,  5 users,  load average: 0,17, 0,24, 0,26

Как видите, в числах используется запятая в качестве десятичного разделителя. Вам нужно что-то похожее на:

$ LC_ALL=en_US top -bn 1 | awk 'NR==1'
top - 08:38:28 up 1 day, 10:23,  5 users,  load average: 0.56, 0.34, 0.30

Но это будет зависеть от того, какие локали были установлены (проверьте с помощьюlocale -a)в вашей системе. Всегда доступна локаль C.

$ LC_ALL=C top -bn 1 | awk 'NR==1'
top - 08:40:35 up 1 day, 10:25,  5 users,  load average: 0.50, 0.39, 0.31

Но использовать top только для извлечения первой строки — это излишество.Лучше использовать время безотказной работы:

$ LC_ALL=C uptime
08:42:08 up 1 day, 10:27,  5 users,  load average: 0.35, 0.37, 0.31

А еще лучше прочтите файл /proc/loadavg

$ cat /proc/loadavg 
0.29 0.34 0.30 1/468 15084

На что, кстати, не влияет локаль. Первое число — это средняя нагрузка за 1 минуту, просто выберите его и распечатайте в любом формате:

$ awk '{printf( "%s\n %f\n %d\n", $1, $1, $1 )}' /proc/loadavg
0.35
0.350000
0

Для использования средней нагрузки 1, 5 и 15 минут:

$ awk '{printf( "%7.3f %7.3f %5.2f\n", $1, $2, $3 )}' /proc/loadavg
 0.150   0.340  0.33
0
21.08.2020, 18:04
0 ответов

Теги

Похожие вопросы