Ваше требование не совсем понятно, но попробуйте это
{
echo "Total items: `echo $QUERY1 | awk '{print $1}'`"
echo "Total Error: `echo $QUERY1 | awk '{print $2}'`"
echo "Percentage: $QUERY2"
} | mail -s "subject" [email protected],[email protected]
Пара { .. }
создает группу процессов, и весь стандартный вывод перенаправляется в 1 |
(канал), который подключается к стандартному входу вашей почтовой программы.
Возможно, вам придется использовать mailx
, -s
указывает тему, которую я вижу из вашего другого вопроса по этой теме, который вы, кажется, понимаете.
Также sendmail
должен быть запущен и правильно настроен для доставки любой почты с машины, на которой вы выполняете этот скрипт.
IHTH
Редактировать: 07.11.2015
Только что получил за это звезду «хороший ответ», и в обзоре я удивлен, что не прокомментировал чрезмерное использование процессов. Для этого случая это можно свести к одному вызову awk
, т.е.
awk -v q1="$QUERY1" -v q2="$QUERY2" \
'END {
split(q1,q1arr)
print "Total items: " q1arr[1] \
"Total Error: " q1arr[2] \
"Percentage: " q2
}' /dev/null \
| mail -s "subject" [email protected],[email protected]
Или для однострочной толпы ;-), то есть
awk -v q1="$QUERY1" -v q2="$QUERY2" 'END {split(q1,q1arr);print "Total items: " q1arr[1] "\nTotal Error: " q1arr[2] "\nPercentage: " q2 }' /dev/null | mail -s "subject" [email protected],[email protected]
В этом случае { .. }
не нужны, так как к каналу подключается только один процесс.
Для случая, когда сводный отчет отправляется один раз в день, исходный код вполне пригоден (но не оптимален). Однако неоптимальное кодирование приводит к вредным привычкам. Вызов 5 процессов, когда одного будет достаточно в цикле, который выполняется 1000 раз в день, приведет к ненужному потреблению вычислительных ресурсов.
Наконец, как о.п. не включает никаких образцов данных, код только слегка протестирован.
09.08.2012