9

Я пытаюсь написать команду, которая направляет непрерывный вывод свободной команды (запускается каждую секунду) в команду awk, которая анализирует определенное значение (доступную свободную память) и выводит его в файл с отметкой времени. Вот мои текущие попытки команды:

free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut

И в качестве альтернативы, после небольшого поиска в Google

free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}'

Каждый прогон производит пустые файлы. Любые предложения или, возможно, другие методы?

4 ответа4

12

Вы должны очистить буфер, чтобы увидеть что-то в memOut во время выполнения:

free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4; fflush(stdout) }' >> memOut

Вот альтернативная версия:

while sleep 1; do sed -n "s/MemFree: */`date`, /p" /proc/meminfo; done >> memOut
3

Для старых версий awk вам, возможно, придется использовать system("") .

На самом деле, fflush(stdout) предназначен только для последних версий awk и gawk , так как только в стандарте POSIX с декабря 2012 года.

free -mto -s 1 | awk '/Mem/ { 
    print strftime("%r") "," $4;
    system(""); # Flush output
}' >> memOut

Обратите внимание, что использование system("") сбрасывает каждый дескриптор файла, его полное описание находится в руководстве gawk , раздел "9.1.4 Функции ввода / вывода".

2

Просто чтобы убедиться, что вы получаете то, что вы на самом деле хотите, а не то, что вы конкретно просили.

Если вы хотите узнать доступную память в системе для программ, это может быть более подходящим:

free -m -s 1 | awk '/buffers\/cache/ { print strftime("%r") "," $4; fflush(stdout) }' >> memOut

В столбце «Используемая строка памяти» содержатся кэши и буферы, и в большинстве случаев, когда вы хотите отслеживать использование памяти для данного компьютера / задачи, это следует по крайней мере отметить.

0

В некоторых версиях awk (например, mawk 1.3.3) вам нужно добавить флаг интерактивной командной строки -W interactive чтобы включить небуферизованную работу с каналами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .