Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne]sortowanie powtórzeń
Forum PHP.pl > Forum > Przedszkole
jaszpol
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?
redeemer
W linuxie to by było coś takiego: sort plik.txt | uniq
amii
file + array_unique
jaszpol
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ć.
redeemer
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
jaszpol
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.
redeemer
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. }
jaszpol
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.