Напоминание о дне рождения

Никто не отвечает, так что вот что я сделал:

sort -T /mnt/tmp --parallel=14 -S 50G myBigFile.txt

Я не использовал -размер партии , так как не был уверен, что будет хорошим значением, и предположительно сорт в любом случае умён в этом.

/mnt смонтирован на большом эфемерном диске (машина - VM в облаке). Если /tmp находится на диске с большим количеством места, вы можете пропустить -T. Если у вас очень быстрый диск с достаточным количеством места, используйте его.

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

-3
29.07.2014, 17:42
3 ответа

Вот ответ в хитроумном псевдокоде. Вы можете реализовать на любом понравившемся языке.

С файлом даты в согласованном формате (называемые «днями рождения»).

today=GET_TODAYS_DATE()
While not end of file birthdays
do
  read from file DATE NAME
  if today=DATE then
       mail address with "Today is NAME's birthday"
  endif
endwhile

Запускать его каждый день в cron в 1 минуту после полуночи.

0
28.01.2020, 05:18

Как и было запрошено, ниже представлен рабочий бэш-скрипт. Я использую разделитель полей со знаком "=" внутри каждой пользовательской 'записи', а пробел - это разделитель записей. Обратите внимание, я добавил вымышленные письма для полноты.


#!/bin/bash
#
DATE=$(date '+%m-%d-%Y')
bdays='08-02-2014=Prashant=abc@example.com 08-15-2014=prabhat=123@example.com 09-16-2014=Aks=xyz@example.com 12-30-2014=Bks=example@example.com'

for i in $bdays do bday=$(echo $i | awk -F= '{print $1}') name=$(echo $i | awk -F= '{print $2}') email=$(echo $i | awk -F= '{print $3}') [[ $DATE = $bday ]] && { echo " Birthday alerts: today is $name 's Birthday Wish!! " |mail -s "b-alert" $email } done

Чтобы прочитать дни рождения из файла, замените bdays='....':

bdays=$(cat Birthday)

Содержимое файла "День рождения" будет в том же формате, все в одной строке:

08-02-2014=Prashant=abc@example.com 08-15-2014=prabhat=123@example.com 09-16-2014=Aks=xyz@example.com 12-30-2014=Bks=example@example.com

2
28.01.2020, 05:18

Если это задание требует написания скрипта оболочки, посмотрите на другие ответы. Но если Вы хотите получать периодические оповещения, о днях рождения или о чём-либо другом, Вы можете использовать команду calendar, которая включена в большинство Unix-систем.

На Linux:

$ mkdir ~/.calendar
$ echo -e "Jul 30\tMother's Birthday" >> ~/.calendar/calendar
$ echo -e "08/02\tPrasant's Birthday" >> ~/.calendar/calendar
$ echo -e "Aug 15\tPrabhat's Birthday" >> ~/.calendar/calendar 
$ # note that you need to have a tab between the date and the event description
$ calendar
Jul 30  Mother's Birthday

Вы можете поместить

0 2 * * * calendar|mail -s "b-alert" abc@domain.com

в кронтаб, чтобы он запускался каждое утро в 2AM (или просто календарь, так как крон будет посылать Вам выходные команды). На некоторых системах календарь по умолчанию запускается для всех рано утром каждого дня.

Вы можете поместить календарь в свой ~/.bash_profile, чтобы он запускался каждый раз при входе в систему.

2
28.01.2020, 05:18

Теги

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