Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [inne]sortowanie powtórzeń, potrzebny skrypt do przesortowania bazy danych .txt
jaszpol
post 10.04.2012, 13:01:19
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.04.2012

Ostrzeżenie: (0%)
-----


Witam serdecznie wszystkich użytkowników forum jako iż jestem nowy to postaram się w miarę zrozumiale przedstawić problem jaki mam. Otóż posiadam baze 3 tys maili w formacie .txt w układzie
mail@mail.com
mail@mail1.com
mail@mail.com
itd. aż do 3000

Mam problem ponieważ podczas gdy wysyłam te maile to są powtórzenia adresów. Są to maile z moich paru stron i jak ktoś rejestrował się na wszystkich moich stronach to jest parę razy w tej bazie. Chciał bym od was uzyskać jakąś pomoc, wskazówkę jak usunąć te powtórzenia maili. Bo ręcznie raczej nie będę 3000 maili sortował. Jakieś podpowiedzi?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
redeemer
post 10.04.2012, 13:03:51
Post #2





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


W linuxie to by było coś takiego: sort plik.txt | uniq


--------------------
Go to the top of the page
+Quote Post
amii
post 10.04.2012, 13:32:18
Post #3





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

Ostrzeżenie: (0%)
-----


file + array_unique


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
jaszpol
post 10.04.2012, 14:33:07
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.04.2012

Ostrzeżenie: (0%)
-----


Cytat(redeemer @ 10.04.2012, 14:03:51 ) *
W linuxie to by było coś takiego: sort plik.txt | uniq


Zrobiłem tak jak powiedziałeś przez linuxa i w plik.txt było 3254 maili. po wpisaniu sort plik.txt | uniq wyskoczyło mi 259 maili. Trochę za mało? Wyskoczył mi chyba maile które się nie powtarzają. A mi chodziło o usunięcie powtórzeń. A co do postu amii to nie mam pojęcia jak to zrobić.
Go to the top of the page
+Quote Post
redeemer
post 10.04.2012, 14:38:39
Post #5





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


Dziwne - powinno zadziałać. Do "wypisania" duplikatów służy przełącznik -d w poleceniu uniq. Spróbój jeszcze: sort -u plik.txt


--------------------
Go to the top of the page
+Quote Post
jaszpol
post 10.04.2012, 16:35:35
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.04.2012

Ostrzeżenie: (0%)
-----


Cytat(redeemer @ 10.04.2012, 15:38:39 ) *
Dziwne - powinno zadziałać. Do "wypisania" duplikatów służy przełącznik -d w poleceniu uniq. Spróbój jeszcze: sort -u plik.txt


Właśnie też mnie to dziwi że nie działa tak jak powinno po wpisaniu sort -u plik.txt wyskakuje to samo co przy wpisaniu sort plik.txt |uniq.
Dopiero jak wpisałem sort -d plik.txt to zaczęły wyskakiwać powtórzenia ale z tego co widzę. To za każdym razem wyskakuje 200-parę.
Ale to nie wyskakuje tak jak trzeba bo wyskakują powtórzenia nicku przykładowo, jest wpisane
test1@gmail.com
test1@o2.pl
i traktuje to jako powtórzenie co nie powinno :| Więc nadal mi za wiele to nie pomogło. Bo potrzebuję przesortować całe 3000 maili.

Ten post edytował jaszpol 10.04.2012, 16:36:56
Go to the top of the page
+Quote Post
redeemer
post 11.04.2012, 08:34:50
Post #7





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


sort i uniq to dwa oddzielne polecenia. sort -d wypisuje w kolejności alfabetycznej, a do wypisania rekordów unikalnych służy flaga -u (możesz jeszcze dodać -f do ignorowania wielkości liter). U mnie działa bez zarzutów. Gdybyś dalej nie mógł sobie poradzić, to poniżej skrypt w php "na szybko", który powinien robić to samo:
  1. $tmpArray = array();
  2. $lines = file('./plik.txt');
  3. foreach($lines as $line) {
  4. echo isset($tmpArray[ ($trimmed=trim($line)) ]) ? false : ($tmpArray[ $trimmed ] = $trimmed)."\n";
  5. }


--------------------
Go to the top of the page
+Quote Post
jaszpol
post 11.04.2012, 19:19:17
Post #8





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.04.2012

Ostrzeżenie: (0%)
-----


Cytat(redeemer @ 11.04.2012, 09:34:50 ) *
sort i uniq to dwa oddzielne polecenia. sort -d wypisuje w kolejności alfabetycznej, a do wypisania rekordów unikalnych służy flaga -u (możesz jeszcze dodać -f do ignorowania wielkości liter). U mnie działa bez zarzutów. Gdybyś dalej nie mógł sobie poradzić, to poniżej skrypt w php "na szybko", który powinien robić to samo:
  1. $tmpArray = array();
  2. $lines = file('./plik.txt');
  3. foreach($lines as $line) {
  4. echo isset($tmpArray[ ($trimmed=trim($line)) ]) ? false : ($tmpArray[ $trimmed ] = $trimmed)."\n";
  5. }


Jesteś moim mistrzem człowieku, jak bym Cię kiedykolwiek spotkał wiszę ci piwo. Nikt ale to nikt nie potrafił mi z tym pomóc, z nauczycieli w szkole nikt nie potrafił takiego czegoś zrobić. (chodzę do technikum informatycznego) Co do putty to funkcja sortująca była ograniczona i sortowała max 270-pare maili tylko. A skrypt php zrobił to w sekunde. Z 3254 maili zostało mi 2932 maile. Nawet po wpisywaniu tego co pisałeś w ostatnim poście linux był ograniczony, jednak php rządzi. Stworzyłem tylko plik skrypt.php dodałem w nim znacznik startu i końca dokumentu, twoją treść skryptu i wszystko mi przesortowało. Naprawdę dzięki za rozwiązanie problemu. Proszę o zamknięcie smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 16:15