Использование переменной в awk для получения определенной строки в отчете о системной активности (sar)

Я пытаюсь получить определенный параметр с помощью 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

может кто-нибудь сказать мне, что не так в моем сценарии?


person groovybear    schedule 01.06.2016    source источник
comment
Никогда не должно быть необходимости в awk | awk. Кроме того, ваши цитаты повсюду.   -  person Dima Tisnek    schedule 02.06.2016
comment
Общий совет --- обрежьте свой сценарий, пока ошибка не исчезнет, ​​тогда последнее изменение было тем, что вам нужно.   -  person Dima Tisnek    schedule 02.06.2016