具有多个命令的 awk 命令

具有多个命令的 awk 命令

当我尝试下面的代码时出现错误,例如 -

+ 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 内运行echosar | awk子 shell 的整个输出重定向到utilisation.txt

free如果您的系统上没有并且top -M -n 1适合您,则使用此作为第一行:

mem=$(top -M -n1 | awk '/Mem/ {print $7}')

相关内容