Назад | Перейти на главную страницу

время безотказной работы | awk -F: '{print $ NF}' - Что здесь происходит?

Может кто-нибудь объяснить мне, что здесь происходит?

uptime | awk -F: '{print $NF}'

Я не понимаю, почему эта команда дает тот же результат, что и

uptime | awk -F: '{print $5}'

Хорошее объяснение Эсы Йокинен, я даю вам один пример, чтобы не использовать конкретный номер столбца в случае безотказной работы (примеры взяты из системы MAC).

$ uptime
16:12  up 25 days,  2:48, 15 users, load averages: 3.41 3.20 3.11

Проверь сколько полей.

$ uptime | awk -F: '{print NF}'
4

Теперь, если вы используете $ NF, он даст желаемый результат, а 5 долларов - нет.

$ uptime | awk -F: '{print $NF}'
3.96 3.31 3.15

В -F fs опция определяет разделитель поля ввода как регулярное выражение fs. Так вот : это просто разделитель для разделения на столбцы.

Опция -F (--field-separator fs) -F: делает : то разделитель полей ввода.

Мы могли бы взять результат примера uptime и разделить его на поля, разделенные ::

 09:03:24 up 32 days,  1:32,  3 users,  load average: 0.04, 0.09, 0.08
 -- -- ----------------- --------------------------- -----------------
 1  2          3                      4                      5

Легко сказать, что поля 1-4 сами по себе довольно бессмысленны, но 5-е поле дает нам только средняя нагрузка. Но это работает не все время, так как часом раньше это было бы 4-е поле:

 08:03:24 up 32 days, 32 min, 3 users,  load average: 0.00, 0.00, 0.00
 -- -- --------------------------------------------- -----------------
 1  2                        3                               4

Здесь $NF приходит на помощь, так как всегда будет выдавать количество полей: в первом случае оно было бы равно $5, но во втором случае $4.

Собирая все вместе, | awk -F: '{print $NF}' всегда отдает все после последнего :.