Eu estou tentando escrever um comando que canaliza a saída contínua de um livre comando (executar a cada segundo) para um comando awk que analisa um valor específico (memória livre disponível) e envia isso para um arquivo com um registro de data e hora. Aqui estão minhas tentativas atuais no comando:
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut
E alternativamente, depois de um pouco de pesquisando
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}'
Cada execução produz arquivos vazios. Alguma sugestão ou possivelmente diferentes métodos?
Para versões antigas de
awk
você pode ter que usarsystem("")
.Na realidade,
fflush(stdout)
é apenas para versões recentes deawk
egawk
, como é o único no padrão POSIX desde dezembro de 2012.Note que usando
system("")
libera todos os descritores de arquivos, descrição completa está nogawk
manual, seção "9.1.4 Funções de entrada / saída".fonte
Apenas para ter certeza de que você está recebendo o que realmente quer e não o que você pediu especificamente.
Se você quiser saber a memória disponível no sistema para programas, isso pode ser mais adequado:
A coluna Usada da linha Mem inclui caches e buffers e, na maioria dos casos, quando você deseja monitorar o uso de memória para determinado computador / tarefa, esses devem ser, pelo menos, anotados.
fonte
Em certas versões de
awk
(por exemplo, mawk 1.3.3) você precisa adicionar o-W interactive
sinalizador de linha de comando para habilitar a operação sem buffer com pipes.fonte