2015-11-18 3 views
0

Я следующий сценарий очистка egrep аргументов из всех .csv файлов в текущей папке (используется для очистки списков адресов электронной почты):Bash Подавления Script

#!/bin/bash 
for file in $(find . -name "*.csv"); do 
     echo "====================================================" >> db_purge_log.txt 
     echo "$file" >> db_purge_log.txt 
     echo "----------------------------------------------------" >> db_purge_log.txt 
     echo "Contacts BEFORE purge:" >> db_purge_log.txt 
     wc -l $file | cut -d " " -f1 >> db_purge_log.txt  
     echo " " >> db_purge_log.txt 
     cat $file | egrep -v "marketing" | grep -v -E -i '([0-z])\1{2,}' | uniq | sort -u > tmp_file 
     echo "$file is now clean!" 
     mv tmp_file $file ; 
     echo "Contacts AFTER purge:" >> db_purge_log.txt 
     wc -l $file | cut -d " " -f1 >> db_purge_log.txt 
done 

Я хотел бы раздел egrep -v "marketing" быть запущен в петле на файл с именем X.csv и все аргументы оттуда. В конце концов список из 6M контактов будет подавлен из другого списка контактов 6M (если возможно, потребуется 6M * 6M запросов на сервере).

Любая идея, как это сделать?

+0

Так вместо 'marketing', вы хотите, чтобы получить строку соответствия из содержимого файла? Используйте 'egrep -v -f X.csv'. – Barmar

+0

[Не перебирайте вывод 'find' с' for'] (http://mywiki.wooledge.org/DontReadLinesWithFor). – chepner

+0

Привет, Не работает. Идея заключается в том, что в x.csv у меня есть 3 адреса электронной почты (например, [email protected]) => Эти 3 адреса электронной почты необходимо удалить из $ файла в моем файле выше. переход на egrep -v -f x.csv не делает этого. –

ответ

0

Обратите внимание, что ваш список исключений должны быть один шаблон (адрес электронной почты) в каждой строке, то есть со страницы человека задать расширенное:

-f FILE, --file = ФАЙЛ Получить образцы из ФАЙЛА, один за линия. Пустой файл содержит нулевые шаблоны и, следовательно, ничего не соответствует.

Так измените свою линию исключения, как предложено Orr, но также убедитесь, что ваш файл x.CSV действительно является одним адресом электронной почты в строке. Кроме того, это должно, скорее всего, будет чувствительно к регистру, поэтому, возможно, что-то вроде:

cat $file | egrep -vi -f Excludes.txt | \ 
    grep -v -E -i '([0-z])\1{2,}' | sort | uniq > tmp_file 

Основываясь на опыте, я предпочитаю использовать Uniq ПОСЛЕ сортировки.

:)
Dale