我正在尝试编写一个命令,该命令将空闲命令的连续输出(每秒运行一次)传送到一个 awk 命令,该命令解析特定值(可用空闲内存)并将其输出到带有时间戳的文件中。这是我目前对命令的尝试:
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut
Run Code Online (Sandbox Code Playgroud)
或者,经过一些谷歌搜索
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}'
Run Code Online (Sandbox Code Playgroud)
每次运行都会产生空文件。任何建议或可能不同的方法?
cYr*_*rus 15
您必须刷新缓冲区才能memOut
在执行过程中看到一些内容:
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4; fflush(stdout) }' >> memOut
Run Code Online (Sandbox Code Playgroud)
这是一个替代版本:
while sleep 1; do sed -n "s/MemFree: */`date`, /p" /proc/meminfo; done >> memOut
Run Code Online (Sandbox Code Playgroud)
对于旧版本,awk
您可能必须使用system("")
.
实际上,fflush(stdout)
仅适用于awk
和的最新版本gawk
,因为自 2012 年 12 月以来它仅出现在 POSIX 标准中。
free -mto -s 1 | awk '/Mem/ {
print strftime("%r") "," $4;
system(""); # Flush output
}' >> memOut
Run Code Online (Sandbox Code Playgroud)
请注意,使用system("")
刷新每个文件描述符,其完整描述在gawk
手册的“9.1.4 输入/输出函数”部分中。
归档时间: |
|
查看次数: |
14113 次 |
最近记录: |