Выбрасывание дублей адресов e-mail

Модератор: Модераторы разделов

Аватара пользователя
ReSeR
Сообщения: 383
ОС: GNU Debian

Выбрасывание дублей адресов e-mail

Сообщение ReSeR »

Есть небольшой скрипт, который проверяет значение, и скидывет полученное по содержащимся в нем же адресам e-mail.

Код: Выделить всё

select=`sqlplus -S user/pass@SYS @/home/jobs.sql`
/bin/echo "$select" > /home/new
/bin/grep @ /home/new > /home/adress

        set `cat /home/adress`

         /bin/echo $1 > /home/1
        /bin/echo $2 > /home/2
        /bin/echo $3 > /home/3
        /bin/echo $4 > /home/4
        /bin/echo $5 > /home/5
        /bin/echo $6 > /home/6
        /bin/echo $7 > /home/7
        /bin/echo $8 > /home/8
        /bin/echo $9 > /home/9

                if [ -s /home/1 ]
                    then /usr/local/bin/sendEmail -f from@email.com -t "$1" -u "PROBLEM" -m "$select" -s mail.server.com
                    else exit 0
                fi

                if [ -s /home/2 ]
                    then /usr/local/bin/sendEmail -f from@email.com -t "$2" -u "PROBLEM" -m "$select" -s mail.server.com
                    else exit 0
                fi

                if [ -s /home/3 ]
                    then /usr/local/bin/sendEmail -f from@email.com -t "$3" -u "PROBLEM" -m "$select" -s mail.server.com
                    else exit 0
                fi

                if [ -s /home/4 ]
                    then /usr/local/bin/sendEmail -f from@email.com -t "$4" -u "PROBLEM" -m "$select" -s mail.server.com
                    else exit 0
                fi

                if [ -s /home/5 ]
                    then /usr/local/bin/sendEmail -f from@email.com -t "$5" -u "PROBLEM" -m "$select" -s mail.server.com
                    else exit 0
                fi

                if [ -s /home/6 ]
                    then /usr/local/bin/sendEmail -f from@email.com -t "$6" -u "PROBLEM" -m "$select" -s mail.server.com
                    else exit 0

                if [ -s /home/7 ]
                    then /usr/local/bin/sendEmail -f from@email.com -t "$7" -u "PROBLEM" -m "$select" -s mail.server.com
                    else exit 0
                fi

                if [ -s /home/8 ]
                    then /usr/local/bin/sendEmail -f from@email.com -t "$8" -u "PROBLEM" -m "$select" -s mail.server.com
                    else exit 0
                fi

                if [ -s /home/9 ]
                    then /usr/local/bin/sendEmail -f from@email.com -t "$9" -u "PROBLEM" -m "$select" -s mail.server.com
                    else exit 0
                fi

    exit 0
Так вот при выполнении

Код: Выделить всё

/bin/grep @ /home/new > /home/adress
бывает что в значении находятся несколько одинаковых адресов и они все заносятся в файл /home/adress, и соответственно человеку приходит несколько одинаковых писем.
Какой утилитой проверить файл /home/adress и выкинуть от туда дубликаты?
Бэкап - акт проявления трусости.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5486
ОС: Gentoo

Re: Выбрасывание дублей адресов e-mail

Сообщение /dev/random »

sort -u
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Выбрасывание дублей адресов e-mail

Сообщение drBatty »

ReSeR писал(а):
02.11.2011 17:41
Какой утилитой проверить файл /home/adress и выкинуть от туда дубликаты?

man uniq
/dev/random писал(а):
02.11.2011 17:48
sort -u

и это тоже.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Выбрасывание дублей адресов e-mail

Сообщение SLEDopit »

ReSeR
Почитали бы Вы что-нибудь про циклы. Весь Ваш скрипт можно заменить чем-то вроде этого:
Весь Ваш скрипт:

Код: Выделить всё

#!/bin/bash
INDEX=1 ; sqlplus -S user/pass@SYS @/home/jobs.sql | grep @ | sort -u | while read ADDRESS ; do
                [ -n $ADDRESS ] && sendEmail -f from@email.com -t "$INDEX" -u "PROBLEM" -m "$select" -s mail.server.com;
                ((INDEX++))
done
А в Вашем скрипте, если адресов будет больше 10, скрипт будет отрабатывать неверно.
И способ проверки переменной, пустая ли она, через файл весьма необычный. test умеет и без файла проверять, если, конечно, эти файлы потом нигде больше не используются.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Выбрасывание дублей адресов e-mail

Сообщение drBatty »

ReSeR писал(а):
02.11.2011 17:41
select=`sqlplus -S user/pass@SYS @/home/jobs.sql`

почти всё вроде можно сделать средствами SQL, это будет быстрее, т.к. вы всё равно её используете.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Выбрасывание дублей адресов e-mail

Сообщение SLEDopit »

drBatty писал(а):
02.11.2011 19:54
почти всё вроде можно сделать средствами SQL, это будет быстрее, т.к. вы всё равно её используете.
Ну письмо sql не отправит. Но выборку через sql реализовать вполне можно.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Выбрасывание дублей адресов e-mail

Сообщение drBatty »

SLEDopit писал(а):
02.11.2011 20:21
Ну письмо sql не отправит.

не отправит, но выхлоп SQL можно напрямую в sendmail направить (через xargs например)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
ReSeR
Сообщения: 383
ОС: GNU Debian

Re: Выбрасывание дублей адресов e-mail

Сообщение ReSeR »

SLEDopit писал(а):
02.11.2011 18:29
Почитали бы Вы что-нибудь про циклы.

Я сейчас этим и занимаюсь, решил на Perl ваять научиться. Но в данной ситуации этот вариант работает и его хватает с головой. Спасибо!
Бэкап - акт проявления трусости.
Спасибо сказали:
Аватара пользователя
Poor Fred
Сообщения: 1575
Статус: Pygoscelis papua
ОС: Gentoo Linux, FreeBSD

Re: Выбрасывание дублей адресов e-mail

Сообщение Poor Fred »

SLEDopit писал(а):
02.11.2011 18:29
Почитали бы Вы что-нибудь про циклы.

И про заголовки Cc: и/или Bcc:
Убить всех человеков!
Спасибо сказали: