Próbuję napisać polecenie, które przekazuje ciągły wynik polecenia wolnego (uruchamianego co sekundę) do polecenia awk, które analizuje określoną wartość (dostępną wolną pamięć) i wysyła to do pliku ze znacznikiem czasu. Oto moje obecne próby polecenia:
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut
I alternatywnie po odrobinie googlingu
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}'
Każde uruchomienie generuje puste pliki. Wszelkie sugestie lub ewentualnie inne metody?
W przypadku starszych wersji
awk
może być konieczne użyciesystem("")
.W rzeczywistości
fflush(stdout)
dotyczy tylko najnowszych wersjiawk
igawk
jako jedyny w standardzie POSIX od grudnia 2012 r.Zauważ, że używając
system("")
opróżnia każdy deskryptor pliku, jego pełny opis znajduje się wgawk
instrukcji, w rozdziale „9.1.4 Funkcje wejścia / wyjścia”.źródło
W niektórych wersjach
awk
(np. Mawk 1.3.3) musisz dodać-W interactive
flagę wiersza poleceń, aby umożliwić niebuforowaną pracę z potokami.źródło
Aby upewnić się, że otrzymujesz to, czego naprawdę chcesz, a nie to, o co konkretnie prosiłeś.
Jeśli chcesz poznać dostępną pamięć w systemie dla programów, może to być bardziej odpowiednie:
Kolumna Używany wiersz pamięci zawiera pamięci podręczne i bufory, a w większości przypadków, gdy chcesz monitorować wykorzystanie pamięci dla danego komputera / zadania, należy przynajmniej zauważyć.
źródło