Ho un elenco di nomi di dominio in un file di testo con un numero di volte in cui si verificano in una raccolta di file di posta elettronica. Per esempio:
598 aol.com
1 aOL.COM
4 Aol.com
1 AOl.com
6 AOL.com
39 AOL.COM
C'erano 598 e-mail inviate a AOL.com e 1 inviati a aOL.COM e così via. Mi chiedevo se ci fosse un modo in bash per combinare aol.com e aOL.COM e tutti gli altri alias in quanto sono in effetti la stessa cosa. Qualsiasi aiuto sarebbe molto apprezzato!
Questa è la linea di codice che ha prodotto quell'output:
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
risposte:
2 per risposta № 1Aggiungere un -i
(--ignore-case
) flag al uniq
comando nella tua one-liner:
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
Dal uniq
pagina man:
-i
--ignore-case
Ignore differences in case when comparing lines.
0 per risposta № 2
Consiglierei di cambiare il programma che produce questo codice per rendere tutto in minuscolo, (Conversione di stringhe in minuscole nello scripting di shell Bash), quindi provare a ordinare.
Fare questo dopo il fatto renderebbe la vita più difficile.