Вывод uptime
включает несколько полей с переменным количеством пробелов. cut
рассматривает каждый пробел как разделитель полей, поэтому изменение некоторых из этих значений будет означать, что ваш cut
выводит совершенно другое число.
Например, количество пользователей дополняется пробелом -. Когда меньше 10, есть два пробела; когда 10 и более, только 1.
$ echo ' 23:17:01 up 38 days, 38 min, 8 users, load average: 0.00, 0.00, 0.00'|cut -d ' ' -f13
average:
$ echo ' 23:17:01 up 38 days, 38 min, 10 users, load average: 0.00, 0.00, 0.00'|cut -d ' ' -f13
0.00,
Вместо этого вы можете использовать awk
, который допускает различное количество пробелов между каждым полем (и игнорирует пробел в начале строки):
$ echo ' 23:17:01 up 38 days, 38 min, 8 users, load average: 0.00, 0.00, 0.00' | awk '{print $11}'
Но это все еще может сломаться, если изменится количество самих «слов», например. когда само время безотказной работы не (только )дней и минут:
14:51:24 up 4 min, 1 user, load average: 0.17, 0.16, 0.07
14:52:09 up 6 days, 21:58, 11 users, load average: 0.79, 0.84, 0.82
Таким образом, другие знаки препинания в строке, запятые и двоеточия, также могут изменяться и не помогают найти нужные вам числа.
Вы можете использовать grep -o...
для извлечения только слов, начиная с load average:
, и извлекать из них правильное слово. Но было бы намного проще полностью прекратить синтаксический анализ вывода uptime
и вместо этого извлечь среднюю загрузку из /proc/loadavg
, если в вашей ОС есть такой файл :
$ cat /proc/loadavg
1.01 0.91 0.85 1/793 24545
Если вам нужно только первое число, игнорируя десятичные дроби, вы можете сделать это с помощью одногоcut
:
$ cut -d. -f1 /proc/loadavg
1