Як передавати awk вихід (з періодичним, безперервним введенням) у вихідний файл?


10

Я намагаюся написати команду, яка передає безперервний вихід вільної команди (запускати щосекунди) команді awk, яка аналізує певне значення (наявна вільна пам'ять) і виводить це у файл із часовою позначкою. Ось мої поточні спроби команди:

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

І як альтернатива, після трохи гуглити

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

Кожен запуск створює порожні файли. Будь-які пропозиції чи, можливо, різні методи?

Відповіді:


13

Ви повинні промити буфер, щоб побачити щось у 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 Функції вводу / виводу".


3

У певних версіях awk(наприклад, mawk 1.3.3) вам потрібно додати -W interactiveпрапор командного рядка, щоб увімкнути небуферовану роботу з трубами.


2

Просто для того, щоб переконатися, що ви отримуєте те, чого насправді хочете, а не те, що конкретно просили.

Якщо ви хочете дізнатися про наявну в системі пам'ять для програм, то це може бути більш підходящим:

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

Стовпчик "Використовуваний рядок" Mem включає в себе кеші та буфери, і в більшості випадків, коли ви хочете контролювати використання пам'яті для даного комп'ютера / завдання, це слід принаймні зазначити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.