Может кто-нибудь объяснить мне, что здесь происходит?
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}'
всегда отдает все после последнего :
.