Потоковые изменения в доступной памяти

Как отмечено в GNU Awk Users' Guide 8.2 Использование чисел для индексации массивов

An important aspect to remember about arrays is that array subscripts are always strings. When a numeric value is used as a subscript, it is converted to a string value before being used for subscripting

Если nравно 7432, то n/1000равно 7.432-, оно не будет округляться по умолчанию. Так

$ awk -vn=7432 'BEGIN{arr[7] = "seven"; arr["7.432"] = "foo"; p = n/1000; print p, arr[p]}'
7.432 foo

тогда как

$ awk -vn=7432 'BEGIN{arr[7] = "seven"; arr["7.432"] = "foo"; p = int(n/1000); print p, arr[p]}'
7 seven

1
12.12.2020, 14:33
1 ответ

Этот пример изman stdbuf— то, что вам нужно. Это применимо для общего случая, когда вы хотите направить поток на uniq, подобно этому. И причина в том, что uniqнужно увидеть больше строк, чтобы решить, следует ли печатать текущую строку или нет.

EXAMPLES
       tail -f access.log | stdbuf -oL cut -d ' ' -f1 | uniq
       This will immediately display unique entries from access.log

Для вашего случая:

free -s1 -h | stdbuf -oL awk 'NR%4==2' | uniq

Другой способ сделать это — использовать одну команду awk, сохраняя только что напечатанную строку и проверяя это значение перед печатью:

free -s1 -h | awk 'NR%4 == 2 {if ($0 != p) print; p = $0}'

Кроме того, для отслеживания вывода команды может быть полезно watch.

1
18.03.2021, 22:43

Теги

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