linux - отправить электронное письмо, где body - это строка текста из файла - зависит от даты

314
Mike

Я хотел бы добавить задачу cron, которая отправляет электронное письмо на me@example.com один раз в день и содержит текстовую строку из файла в зависимости от даты в качестве тела сообщения.

Мой файл file.txt будет выглядеть так:

10-16-18 green 10-17-18 brown 10-18-18 blue .... 10-01-20 purple 

например, дата 10-16-18 я получаю письмо с "коричневым" в теле. Файл может в конечном итоге иметь сотни строк.

1
10-16-18 имеет "зеленый" в своей строке, но вы хотите, чтобы он отправил текст на следующей строке под ним, "коричневый"? Xen2050 5 лет назад 0

1 ответ на вопрос

1
B. Morris

Это вытянет нужную строку из файла и вернет остаток строки. Если совпадает более чем одна строка, он напечатает их все.

awk '$1 == "'`date '+%m-%d-%y'`'" { print substr($0, 10) }' file.txt | mail ...

Вы можете ограничиться только первым совпадением, добавив ;exitперед }.

Также 10длина матча; если вы хотите полный год вы можете изменить, %yчтобы %Yи 10в 12.

Итак, чтобы сделать работу cron, скажем, в 6:00 утра, вы должны поместить это в ваш crontab:

0 6 * * * awk '$1 == "'`date '+%m-%d-%y'`'" { print substr($0, 10) }' file.txt | mail -s SUBJECT me@example.com

Это было замечательно, спасибо за быстрый и точный ответ. Mike 5 лет назад 0

Похожие вопросы