Estoy tratando de escribir un comando que canalice la salida continua de un comando libre (se ejecuta cada segundo) a un comando awk que analiza un valor específico (memoria libre disponible) y lo envía a un archivo con una marca de tiempo. Aquí están mis intentos actuales en el comando:
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut
Y, alternativamente, después de un poco de Google
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}'
Cada ejecución produce archivos vacíos. ¿Alguna sugerencia o posiblemente diferentes métodos?
Para versiones anteriores de
awk
usted puede que tenga que usarsystem("")
.En realidad,
fflush(stdout)
es solo para versiones recientes deawk
ygawk
, ya que solo está en el estándar POSIX desde diciembre de 2012.Tenga en cuenta que con el uso de
system("")
cada descriptor de archivo, su descripción completa se encuentra en elgawk
manual, sección "9.1.4 Funciones de entrada / salida".fuente
En ciertas versiones de
awk
(por ejemplo, mawk 1.3.3) necesita agregar el-W interactive
indicador de línea de comando para habilitar la operación sin búfer con tuberías.fuente
Solo para asegurarse de que está obteniendo lo que realmente quiere y no lo que solicitó específicamente.
Si desea conocer la memoria disponible en el sistema para programas, entonces esto podría ser más adecuado:
La columna Usado de la línea Mem incluye cachés y memorias intermedias y, en la mayoría de los casos, cuando desee monitorear el uso de la memoria para una computadora / tarea determinada, al menos deben tenerse en cuenta.
fuente