Linux

可用記憶體中的流更改

  • December 12, 2020

我想出了以下命令來檢查記憶體使用的變化:

free -s 1 -h | awk 'NR%4==2'

這顯示如下輸出:

Mem:           125G         32G         82G        404M         10G         91G     
Mem:           125G         32G         82G        404M         10G         91G     
Mem:           125G         32G         82G        404M         10G         92G     

我實際上只對記憶體使用的變化感興趣,所以我嘗試通過管道傳遞uniq

free -s 1 -h | awk 'NR%4==2' | uniq

但是,當使用它時,根本不會給出任何輸出。我假設uniq正在等待其輸入完成,但當然它永遠不會。

我在 RedHat 7.6 上

這個例子man stdbuf就是你要找的。它適用於您希望將流傳輸到的一般情況uniq,類似於此。原因是uniq需要查看更多行來決定是否應該列印目前行。

EXAMPLES
      tail -f access.log | stdbuf -oL cut -d ' ' -f1 | uniq
      This will immediately display unique entries from access.log

對於您的情況:

free -s1 -h | stdbuf -oL awk 'NR%4==2' | uniq

另一種方法是使用一個awk命令,保存剛剛列印的行並在列印之前針對該值進行測試:

free -s1 -h | awk 'NR%4 == 2 {if ($0 != p) print; p = $0}'

此外,監視命令的輸出watch可能很有用。

引用自:https://unix.stackexchange.com/questions/624100