当我尝试下面的代码时出现错误,例如 -
+ awk '{if ($1 > 1)
{ print "Memory utilisation is high \n Please find history of the memory utilisation below"
sar -r|awk {print' ',,,}| column -t }
}'
awk: cmd. line:2: sar -r|awk {print
awk: cmd. line:2: ^ syntax error
awk: cmd. line:3: sar -r|awk {print
top -M -n1 | grep "Mem" | awk '{print 0 + $7}' | awk '{ print $1 / 1024 }' | awk '{if ($1 > 1)
{ print "Memory utilisation is high \n Please find history of the memory utilisation below"
sar -r|awk '{print $1,$2,$3,$4}'| column -t }
}' >>/home/shyam/utilisation.txt
我应该如何将两个输出重定向到文件?
答案1
通常不需要grep .. | awk ..| awk
我改变grep "Mem" | awk '{print 0 + $7}' | awk '{ print $1 / 1024 }'
- 到
awk '/Mem/ {print 0 + $7}' | awk '{ print $1 / 1024 }'
- 到
awk '/Mem/ {print 0 + $7/1024 }'
- 到
awk '/Mem/ { if ( $7 > 1024 ) ...
我会从
top -M -n1 | awk '/Mem/ {if ($7 > 1024) {
print "Memory utilisation is high \n" ;
print "Please find history of the memory utilisation below\n" ;
print " sar -r|awk \'{print $1,$2,$3,$4}\'| column -t \" } }' >>/home/shyam/utilisation.txt
答案2
有什么top -M -n 1
作用?在我的系统上,-M
是无效选项。我假设您正在尝试获取系统上使用的内存量(以兆字节为单位)?在这种情况下,使用free
而不是top
从 ncurses 应用程序中提取数据top
是愚蠢的,因为有纯文本工具可以free
完成这项工作。
无论如何,我将free -m
在我的示例脚本中使用。
以 Archemar 的工作为基础,消除多余的 grep 和 awk 命令:
mem=$(free -m | awk '/Mem:/ {print $3}')
if [ "$mem" -gt 1024 ] ; then (
echo "Memory utilisation is high"
echo "Please find history of the memory utilisation below"
sar -r | awk '{print $1,$2,$3,$4}' | column -t
) >>/home/shyam/utilisation.txt
fi
它没有使用awk
来完成所有工作,而是仅使用awk
从 的输出中提取内存使用数据free -m
,然后使用 shell 代码来完成其余的工作。它在子 shell 内运行echo
,sar | awk
子 shell 的整个输出重定向到utilisation.txt
free
如果您的系统上没有并且top -M -n 1
适合您,则使用此作为第一行:
mem=$(top -M -n1 | awk '/Mem/ {print $7}')