Program do wyciagania maili z pliku txt

Witam.

Mam w katalogu archiwum maili w formacie .txt (przeszło 120 tys. sztuk). Potrzebuję jakiegoś programu, który wyciągnie mi wszystkie adresy email z każdego maila, a następnie zapisze do innego pliku .txt (najlepiej bez duplikatów).

 

W Google wychodzą tylko jakieś skrypty php, na których mało się znam. 

 

pozdrawiam

Na wstępie - zapoznaj się proszę z klawiszem “Alt” w klawiaturze (znaki diakrytyczne). Potem zapoznaj się z wyrażeniami regularnymi:

" [A-z,0-9]{1,}\@[A-z,0-9,\.]{1,}"

Czego użyjesz to już Twoja sprawa, możesz to nawet zrobić w Notepad++;  pod linuksem sed itd.

Ogarnąłem teorie. Jak to zastosować w praktyce? Wzór, czy też wyrażenie na wyciągnięcie maili napisze (chyba).

na dzięń dobry narzędzia z http://sourceforge.net/projects/unxutils/ a później robisz coś na wzór

 

cat twój_plik.txt |grep -e “wzorzec” > plik_wynikowy.txt

 

Pozdrawiam,

 

mr-owl

 

Po co ten cat do grepa?

 

Tak, wzrór wyciągnie, podałem Ci na tacy gotowe rozwiązanie (nie testowałem, ale wygląda znośnie).

mixnet, na forum piszemy w języku polskim, w związku z tym należy korzystać z polskich liter diakrytyzowanych (ą,ę,ć,ł,ń,ó,ś,ź,ż). Proszę poprawić swój post, w przeciwnym razie temat zostanie przeniesiony do kosza.

Cat jest dla tych, którzy nie potrafią korzystać z grepa, albo raczej nie wiedzą jak działa grep :wink:

Posty poprawiłem.

 

Ok, jestem lamerem, ale że nie jestem do końca ignorantem, to trochę pogooglowałem.

 

  1. Siedzę na Ubuntu.

  2. Skopiowałem plik test.txt na pulpit oraz stworzyłem pusty plik wynik.txt też na pulpicie.

  3. Odpaliłem konsole i wpisałem (oczywiście przechodząc cd Pulpit)

cat test.txt |grep -e " [A-z,0-9]{1,}@[A-z,0-9,.]{1,}" > wynik.txt

 

i dostałem

“grep: Błędny koniec zakresu”

 

hmmm?

 

 

 

A to aż taki dramat się dzieje gdy nie używa się -f przy grep tylko potoku?

Odnalezienie maili:

grep -E -o  "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" plik.txt

Z posortowaniem:

grep -E -o  "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" test.txt |sort

Z wyświetleniem ile razy występuje dany email

grep -E -o  "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" test.txt |sort | uniq -c

Zamiast uniq awk do wyrzucenia na ekran tylko maili bez powtórzeń (posortowane):

grep -E -o  "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" test.txt |sort | awk '!seen[$0]++'

To samo, ale do pliku:

grep -E -o  "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" test.txt |sort | awk '!seen[$0]++' > wynik.txt

Nie ma za co.

Działa pięknie, jednak nim wyślę browara mam jeszcze 2 pytania  :-D 

 

  1. Ważniejsze.

Jak to uruchomić na raz do wszystkich plików txt. w katalogu? Mam tego 120 tys. o różnych nazwach.

Wpisałem zamiast test.txt  po prostu *.txt i zadziałało, ale w pliku wynikowym dostałem informację zwrotną typu

 

test2.txt:xxxx@gmail.com

 

Zależy mi, żeby nie pokazywał z którego pliku jakie wyciagnał maile. Te maile mają bardzo długie i różne nazwy, a więc robi sie bajzel. Potrzebuje same niezdublowane adresy email.

 

  1. Mniej ważne.

Jak to uruchomić na windows 7? Googlowałem i tam podobno zamiennikiem jest findstr. Niestety to się chyba różni składnią. Podane wyrażenie kompletnie nie działa. To takie pytanie, gdybym potrzebował to uruchomić na drugim kompie z windowsem.

 

Pozdrawiam i dziękuję!