Новая строка в сценарии оболочки

У меня есть команда ниже в моем сценарии оболочки, чтобы отправить все четыре выражения эха в одном письме

{
echo "Data Successfully loaded into LIP table"
echo "Total Items Purchased: `echo $QUERY1 | awk '{print $1}'`"
echo "Total Items MissingorMismatch: `echo $QUERY1 | awk '{print $2}'`"
echo "Error Percentage: $QUERY2" 
} | mailx -s "Report for $DATE_YEST_FORMAT1" -r rj@host.com user2@host.com

Но когда я вижу свою электронную почту, я получаю вывод, как показано ниже, который я не хочу

Data Successfully loaded into LIP table Total Items Purchased: 3956391 
Total Items MissingorMismatch: 975825 Error Percentage: 24.66452380464924

Мне нужно вывести что-то вроде ниже, как строка за строкой.

Data Successfully loaded into LIP table 
Total Items Purchased: 3956391 
Total Items MissingorMismatch: 975825 
Error Percentage: 24.66452380464924

Любое предложение, почему это происходит так? я бегу SunOS (Solaris),

Обновить:-

Попробовав предложение, дайте Kevin

QUERY1=`hive -e "
set mapred.job.queue.name=hdmi-technology;
SELECT SUM(total_items_purchased), SUM(total_items_missingormismatch) from lip_data_quality where dt='$DATE_YEST_FORMAT2';"`

QUERY2=`hive -e "
set mapred.job.queue.name=hdmi-technology;
SELECT 100 * SUM(total_items_missingormismatch*1.0) / SUM(total_items_purchased) FROM lip_data_quality where dt='$DATE_YEST_FORMAT2';"`


mailx -s "LIP Data Quality Report for $DATE_YEST_FORMAT1" -r rj@host.com rj@host.com uname@host.com <<EOF
Data Successfully loaded into LIP_DATA_QUALITY table

Total Items Purchased: $(echo $QUERY1 | awk '{print $1}')

Total Items MissingorMismatch: $(echo $QUERY1 | awk '{print $2}')

Error Percentage: $QUERY2
EOF

Вывод, который я получил по электронной почте

Data Successfully loaded into LIP_DATA_QUALITY table

Total Items Purchased: $(echo 3712928   393455 | awk '{print }')

Total Items MissingorMismatch: $(echo 3712928   393455 | awk '{print }')

Error Percentage: 10.596892802661404

Что не правильно.. Я должен получить вывод, как это-

Data Successfully loaded into LIP_DATA_QUALITY table

Total Items Purchased: 3712928

Total Items MissingorMismatch: 393455

Error Percentage: 10.596892802661404

я бегу SunOS

bash-3.00$ uname -a
SunOS lvsaishdc3in0001 5.10 Generic_142901-02 i86pc i386 i86pc

2 ответа

Решение

Возможно, что mailx игнорирует отдельные символы новой строки и разделяет абзацы пустой строкой, аналогично tex и наша собственная ТАК.

Это в сочетании с наследственным

mailx -s "Report for $DATE_YEST_FORMAT1" -r rj@host.com user2@host.com <<EOF
Data Successfully loaded into LIP table

Total Items Purchased: `echo $QUERY1 | awk '{print $1}'`

Total Items MissingorMismatch: `echo $QUERY1 | awk '{print $2}'`

Error Percentage: $QUERY2
EOF

[Похоже, что ваш bash не распознает $(command) синтаксис, поэтому я удалил это.]

[NB я только что проверил, и Солярис mailx отправил письмо, отформатированное точно так, как я его напечатал. Однако если ваш почтовый ридер отображается в режиме HTML, он может свернуть пробел и показать все в одной строке.]

Попробуйте сделать это с помощью \n как обычно это стандартная escape-последовательность для новой строки в функции печати. ​​Примерно так:

{
echo -e "Data Successfully loaded into LIP table\n"
echo -e "Total Items Purchased: `echo $QUERY1 | awk '{print $1}'\n"
echo -e "Total Items MissingorMismatch: `echo $QUERY1 | awk '{print $2}'\n"
echo -e "Error Percentage: $QUERY2\n" 
} | mailx -s "Report for $DATE_YEST_FORMAT1" -r rj@host.com user2@host.com

больше информации можно получить здесь.

Другие вопросы по тегам