Вы не должны печатать $USED
для начала, переменная в awk
равна USED
:
pax> vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 1402804 258392 2159316 0 0 54 79 197 479 1 2 93 3
pax> vmstat | egrep -v 'procs|free' | awk '{USED=4042928-$4-$5-$6;print USED}'
222780
В вашем случае наиболее вероятно то, что выиспользование awk
с этим ограничением около 32000 полей на запись.
Поскольку ваши поля 4
, 5
и 6
соответственно 25172
, 664
и 8520
(изодин из ваших комментариев), ваше USED
значение становится 4042928-25172-664-8520
или 4008572
.
Если вы попытаетесь напечатать USED
, это то, что вы получите, но, потому что вы пытаетесь напечатать$USED
, он думает, что вы хотите $4008572
(номер поля 4008572), который всего лишь немного бит за пределами диапазона 32000.
Интересно, если у вас гораздо больше свободной памяти,вы не получите ошибку, но вы все равно получите ошибочное значение: -)
Кстати, gawk
не имеет этого ограничения, оно просто печатает пустое поле (см., например,, раздел 11,9 здесь ).