sed n\;G <infile
... это все, что вам нужно...
For example:
seq 6 | sed n\;G
1
2
3
4
5
6
... (и пробел следует за 6 также)... или....
seq 5 | sed n\;G
1
2
3
4
5
(и ни одна пустая строка не следует за 5)
Если пустая строка всегда должна быть опущена в последней строке:
sed 'n;$!G' <infile
Вы можете использовать для этого таблицу mysql, поскольку вы уже работаете в mysql! Такой таблицы должно быть достаточно -
create table (
userid varchar(100),
useremail varchar(100),
int mailsent default 0
);
Ваша работа создателя будет создавать (или удалять) строки из этой таблицы.
Ваша почтовая программа будет извлекать все строки с mailsent
, установленным как 0, отправлять почту и устанавливать mailsent
как 1.
Однако, если вы действительно, действительно, действительно хотите использовать текстовый файл - вот подход -
Предположим, что первый вызов задания cron вашего создателя создает файл следующего вида -
user1,user1@example.com
user2,user2@example.com
user3,user3@example.com
Теперь в определенное время запускается задача mailer, которая выберет строки из этого файла, содержащие emailid, отправит их получателям и удалит email id в этих строках. (Вы можете использовать perl или sed для этого - будьте осторожны с синхронной записью этого файла от создателя) После этой операции ваш файл станет
user1
пользователь2
пользователь3
Через некоторое время создатель добавляет еще двух пользователей user4 и user5. Теперь ваш файл становится
user1
пользователь2
пользователь3
user4,user4@example.com
user5,user5@example.com
Когда задача mailer запустится снова, она будет отправлять письма только тем людям, у которых email id указан 0, как в шаге 2.
Существует несколько вариантов работы этой схемы.
Можно использовать любой из следующих двух подходов.
I) Каждый час создавайте файл /tmp/overquotausernew.txt и сравнивайте этот файл со старым файлом /tmp/overquotausernew.txt. Если во вновь созданном файле найдены новые пользователи, то отправьте письмо только этим пользователям и объедините вновь созданный файл с /tmp/overquotauser.txt
Таким образом, вы сохраните только один файл со всеми именами пользователей, которым будет отправлено письмо. А скрипт будет chk для всех новых пользователей, которым не отправляется почта.
II) Вы можете создать скрипт для отправки почты таким образом, что он будет проверять, отправляется ли почта конкретному пользователю с /tmp/overquotauser.txt или нет в течение последних 24 часов. Если почта отправлена в течение последних 24 часов, то скрипт больше ничего не будет делать, он будет отправлять почту этому пользователю.
Одним из способов может быть использование встроенных инструментов квоты
систем *nix... начиная с здесь .
Если Soft Limit
составляет 800MB
и Hard Limit
составляет 1000MB
, то при достижении Soft Limit
пользователь будет отправлен по электронной почте, что позволит ему продолжать создавать файлы до тех пор, пока не будет достигнуто Hard Limit
.
:)