Oggi mi sono reso conto di una cosa terribile! Le mie liste di indirizzi IP che sono solito controllare quatidianamente, presentavano delle mancanze.
Nell'altro thread (viewtopic.php?f=23&t=29936) racconto le mie innumerevoli liste di blocchi "iptables" su tentativi di login al mio server provenienti da indirizzi IP che considero "molesti".
Per controllare tali indirizzi, ovviamente conto i tentativi con il comando Linux "uniq -c", ma quando li devo soltanto elencare utilizzo "sort -u" (--unique) per evitare i doppioni.
E qui nasce il problema. Trattandosi di indirizzi IP la sort normale tende a mettere 136.x.y.z prima di 5.x.y.z e quindi ho aggiunto il parametro "-u" ossia --numeric-sort che funziona soltanto sul primo numero. Significa che 5.x.y.z viene prima di 136.x.y.z, ma in caso di primo numero uguale, 5.136.x.y continua a venire prima di 5.4.x.y.
Pazienza, mi accontento.
BUG
Oggi ho scoperto con orrore che mandando un output in pipe a "sort -nu" perde un sacco di linee che NON sono uguali, a causa della concomitanza con la sort numerica.
Ecco le prove:
- Code: Select all
Given a list of IP addresses the command lines:
# cat controllareARCHIVIO_2020/02/controllare20200213.txt | wc -l
1264
That's the number of lines without sort
# cat controllareARCHIVIO_2020/02/controllare20200213.txt | sort -u | wc -l
1262
That's the number of unique lines with sort --unique
# cat controllareARCHIVIO_2020/02/controllare20200213.txt | sort -nu | wc -l
685
That IS NOT the number of unique lines! Why ordering them numerically should change the number?
In fact, separating the parameters:
# cat controllareARCHIVIO_2020/02/controllare20200213.txt | sort -u | sort -n | wc -l
1262
we workaround the bug.