我想出了以下命令来检查内存使用的变化:
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
答案1
这个例子来自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
可能很有用。