Mam listę nazw domen w pliku tekstowym, które występują wielokrotnie w zbiorze plików e-mail. Na przykład:
598 aol.com
1 aOL.COM
4 Aol.com
1 AOl.com
6 AOL.com
39 AOL.COM
Wysłano 598 e-maili do aol.com i 1 wysłane do aOL.COM i tak dalej. Zastanawiałem się, czy w bashu istnieje sposób na połączenie aol.com i aOL.COM i wszystkich innych aliasów, ponieważ są one w rzeczywistości tym samym. Każda pomoc byłaby bardzo mile widziana!
To jest linia kodu, która wyprodukowała to wyjście:
grep -E -o -r "b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}b" $ARCHIVE | sed "s/.*@//" | sort | uniq -c > temp2
Odpowiedzi:
2 dla odpowiedzi № 1Dodać -i
(--ignore-case
) flaga do uniq
polecenie w jednym wierszu:
grep -E -o -r "b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}b" $ARCHIVE
| sed "s/.*@//"
| sort
| uniq -ic > temp2
Od uniq
strona man:
-i
--ignore-case
Ignore differences in case when comparing lines.
0 dla odpowiedzi nr 2
Polecam zmienić program tworzący ten kod, aby najpierw uczynić wszystko małymi literami (Konwertowanie łańcucha znaków na małe litery w skryptach powłoki Bash), a następnie spróbuj sortować.
Robienie tego po fakcie tylko utrudniłoby ci życie.