我试图在我的 shell 脚本中每 15 分钟使用 awk 获取特定参数。例如我想获得freemem:
$sar -r
SunOS CRP 5.10 Generic_138888-03 sun4v 06/01/2016
00:00:00 freemem freeswap
00:15:00 40317 14989925
00:30:00 43652 15043259
00:45:00 43650 15043147
......
这是我的脚本。
#!/usr/bin/bash
projectDashboard=/opt/player/test/logResc
date=`date +%Y%m%d`
host=`hostname`
cm=$(date +%M)
ch=$(date +%H)
if [ $cm -ge 0 ] && [ $cm -le 15 ];then
sar -r | awk '$1 ~ /$ch:00:00/ {print ($2)}' | awk '{print '$date ' "|" '$host' "|" "memory" "|" $1}' >> $projectDashboard/"$host"_"$date"_00_15.log
elif [ $cm -ge 16 ] && [ $cm -le 30 ];then
sar -r | awk '$1 ~ /$ch:15:00/ {print ($2)}' | awk '{print '$date ' "|" '$host' "|" "memory" "|" $1}' >> $projectDashboard/"$host"_"$date"_00_15.log
elif [ $cm -ge 31 ] && [ $cm -le 45 ];then
sar -r | awk '$1 ~ /$ch:30:00/ {print ($2)}' | awk '{print '$date ' "|" '$host' "|" "memory" "|" $1}' >> $projectDashboard/"$host"_"$date"_00_15.log
elif [ $cm -ge 46 ] && [ $cm -le 59 ];then
sar -r | awk '$1 ~ /$ch:45:00/ {print ($2)}' | awk '{print '$date ' "|" '$host' "|" "memory" "|" $1}' >> $projectDashboard/"$host"_"$date"_00_15.log
fi
预期输出:
20160307|00:15:00|CRP|memory|40317
20160307|00:30:00|CRP|memory|40317
20160307|00:45:00|CRP|memory|40317
20160307|01:00:00|CRP|memory|40317
20160307|01:15:00|CRP|memory|40317
.......
我得到什么:
awk: syntax error near line 1
awk: illegal statement near line 1
我已经尝试将其更改$ch
为${ch}
orawk "$1 ~ /$ch:30:00/ {print ($2)}"
但仍然无法正常工作。我的脚本中是否有任何输入错误或错误的代码?我感谢您的帮助。
更新
我尝试更改$ch
withawk -v
所以脚本是这样的awk -v ch="$(date +%H)" '$1 ~ /ch:00:00/'
。但我仍然得到一个错误。
awk: syntax error near line 1
awk: illegal statement near line 1
awk: syntax error near line 1
awk: bailing out near line 1
有人可以告诉我我的脚本有什么问题吗?