Никто не отвечает, так что вот что я сделал:
sort -T /mnt/tmp --parallel=14 -S 50G myBigFile.txt
Я не использовал -размер партии
, так как не был уверен, что будет хорошим значением, и предположительно сорт
в любом случае умён в этом.
/mnt
смонтирован на большом эфемерном диске (машина - VM в облаке). Если /tmp
находится на диске с большим количеством места, вы можете пропустить -T
. Если у вас очень быстрый диск с достаточным количеством места, используйте его.
Если я правильно помню, ему снова нужно примерно то же место, что и размер сортируемого файла - в основном он делит файл на два или более кусочка, каждый из которых он может отсортировать в памяти, сохраняет их отсортированными во временном диске, затем делает сортировку по слиянию, чтобы получить конечный результат.
Вот ответ в хитроумном псевдокоде. Вы можете реализовать на любом понравившемся языке.
С файлом даты в согласованном формате (называемые «днями рождения»).
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 минуту после полуночи.
Как и было запрошено, ниже представлен рабочий бэш-скрипт. Я использую разделитель полей со знаком "=" внутри каждой пользовательской 'записи', а пробел - это разделитель записей. Обратите внимание, я добавил вымышленные письма для полноты.
#
!/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
Если это задание требует написания скрипта оболочки, посмотрите на другие ответы. Но если Вы хотите получать периодические оповещения, о днях рождения или о чём-либо другом, Вы можете использовать команду 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
, чтобы он запускался каждый раз при входе в систему.