Я пытаюсь получить определенный параметр с помощью awk каждые 15 минут в моем сценарии оболочки. Например, я хочу получить 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}
или awk "$1 ~ /$ch:30:00/ {print ($2)}"
, но все равно не работает. Есть ли в моем скрипте опечатки или неправильный код? Я ценю вашу помощь.
ОБНОВИТЬ
Я пытаюсь заменить $ch
на awk -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
может кто-нибудь сказать мне, что не так в моем сценарии?
awk | awk
. Кроме того, ваши цитаты повсюду. - person Dima Tisnek   schedule 02.06.2016