J'essaie d'écrire une commande qui dirige la sortie continue d'une commande libre (exécutée toutes les secondes) vers une commande awk qui analyse une valeur spécifique (mémoire libre disponible) et la renvoie dans un fichier avec un horodatage. Voici mes tentatives actuelles de commande:
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut
Et alternativement, après un peu de recherche sur Google
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}'
Chaque exécution produit des fichiers vides. Des suggestions ou éventuellement des méthodes différentes?
Pour les anciennes versions,
awk
vous devrez peut-être utilisersystem("")
.En fait,
fflush(stdout)
ne concerne que les versions récentes deawk
etgawk
, comme c'est le seul dans la norme POSIX depuis décembre 2012.Notez que l'utilisation de
system("")
vidages de chaque descripteur de fichier, sa description complète se trouve dans legawk
manuel, section "9.1.4 Fonctions d'entrée / sortie".la source
Sur certaines versions de
awk
(par exemple mawk 1.3.3), vous devez ajouter l'-W interactive
indicateur de ligne de commande pour permettre un fonctionnement sans tampon avec les tuyaux.la source
Juste pour vous assurer que vous obtenez ce que vous voulez réellement et non ce que vous avez spécifiquement demandé.
Si vous souhaitez connaître la mémoire disponible sur le système pour les programmes, cela peut être plus approprié:
La colonne Utilisé de la ligne Mem comprend des caches et des tampons et dans la plupart des cas, lorsque vous souhaitez surveiller l'utilisation de la mémoire pour un ordinateur / une tâche donnée, ceux-ci doivent au moins être notés.
la source