Я пытаюсь написать команду, которая направляет непрерывный вывод свободной команды (запускается каждую секунду) в команду awk, которая анализирует определенное значение (доступную свободную память) и выводит его в файл с отметкой времени. Вот мои текущие попытки команды:
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut
И в качестве альтернативы, после небольшого поиска в Google
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}'
Каждый прогон создает пустые файлы. Любые предложения или, возможно, другие методы?
Для старых версий
awk
вам, возможно, придется использоватьsystem("")
.На самом деле,
fflush(stdout)
это только для последних версийawk
иgawk
, как только в стандарте POSIX с декабря 2012 года.Обратите внимание, что при использовании
system("")
сбрасывает каждый дескриптор файла, его полное описание находится вgawk
руководстве, раздел «9.1.4 Функции ввода / вывода».источник
Просто чтобы убедиться, что вы получаете то, что вы на самом деле хотите, а не то, что вы конкретно просили.
Если вы хотите узнать доступную память в системе для программ, это может быть более подходящим:
В столбце «Используемая строка памяти» содержатся кэши и буферы, и в большинстве случаев, когда вы хотите отслеживать использование памяти для данного компьютера / задачи, это следует по крайней мере отметить.
источник
В некоторых версиях
awk
(например, mawk 1.3.3) вам нужно добавить-W interactive
флаг командной строки, чтобы включить небуферизованную работу с каналами.источник