I come Informatica - I como Informática - I for Information Technology
PORTALE
PORTAL
PORTAL
FORUM
FORO
FORUM
Informatica
Informática
Information Technology
Stefano Pederzani
Consulente informatico
ARTE
Homepages
Curricula
Curricula
Resumes
Pubblicità
Publicidad
Advertisement




sort --unique --numeric-sort drops lines

Tutto ciò che riguarda Linux sulle macchine server o i servizi Linux in generale.
Todo lo que interesa Linux sobre las máquinas servidoras o los servicios Linux en general.
All about Linux server machines or Linux services in general.

sort --unique --numeric-sort drops lines

Postby stefanopederzani » Fri Feb 14, 2020 12:09 am

Salve a tutti.
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.
Amministratore di sistemi Unix e DBA dal 1995
http://pepe.mi.bo.it/SITO_Curricula/CV_ ... efano.html
User avatar
stefanopederzani
 
Posts: 178
Joined: Tue Sep 18, 2012 12:43 am
Location: Bologna

Re: sort --unique --numeric-sort drops lines

Postby stefanopederzani » Fri Feb 14, 2020 12:14 am

Il codice che vedete è il testo che ho inviato al bug reporting indicato nell'ouput di "man sort", il bug delle coreutils.
Si presenta sia sul mio server (Ubuntu) che sul mio PC (CentOS), quindi è un bug delle coreutils.
Ho cercato nell'archivio dei bug ma non ho trovato il mio caso...
Il fatto è che là ho trovato un sacco di altri bug che forse potrebbe interessarvi conoscere.
http://www.gnu.org/software/coreutils/ è la homepage e i bug sono in https://lists.gnu.org/archive/html/bug-coreutils/

Riporterò in questo thread se e cosa mi risponderanno.
Amministratore di sistemi Unix e DBA dal 1995
http://pepe.mi.bo.it/SITO_Curricula/CV_ ... efano.html
User avatar
stefanopederzani
 
Posts: 178
Joined: Tue Sep 18, 2012 12:43 am
Location: Bologna

Re: sort --unique --numeric-sort drops lines

Postby stefanopederzani » Fri Feb 14, 2020 2:10 pm

Devo dire che la risposta degli addetti al database dei bug delle coreutils è stata rapida e precisa. Mi hanno risposto in due ed entrambi sarebbero stati esaurienti presi singolarmente.
Ecco svelato l'arcano: quando si effettua una "sort -n" nell'algoritmo di sort le stringhe delle righe vengono trasformate nel loro valore numerico, cosicché se si effettua una "sort -nu" viene considerata l'unicità non della stringa, ma del suo valore numerico. Dicono che non è un bug...
Insomma se io provo a fare "sort -nu" di una lista con gli indirizzi 1.2.3.4 e 1.2.158.255 il loro valore numerico viene considerato in entrambi i casi 1,2 poiché nella grafia anglosassone il puntino corrisponde alla nostra virgola.
Questo porta al risultato che la "sort -nu" su di una lista di indirizzi IP tenderà ad eliminare, poiché considerati doppioni, tutti i duplicati degli indirizzi prendendo in considerazione i primi due numeri. E questo per via del puntino che per loro è una virgola, perché se ci fosse uno spazio dopo il primo numero, si terrebbe in considerazione soltanto quello!

ATTENZIONE, quindi. NON FATE MAI "sort -nu" a meno che non siano effettivamente valori numerici, perché stringhe che iniziano con un numero portano ad un risultato errato. Utilizzate quindi "sort -u | sort -n" o viceversa, che è uguale. L'importante è non mettere i due parametri insieme.

FINE
Amministratore di sistemi Unix e DBA dal 1995
http://pepe.mi.bo.it/SITO_Curricula/CV_ ... efano.html
User avatar
stefanopederzani
 
Posts: 178
Joined: Tue Sep 18, 2012 12:43 am
Location: Bologna


Return to Server Linux - Servidores Linux - Linux servers



Who is online

Users browsing this forum: No registered users and 5 guests





CV di Stefano Pederzani




I come Informatica - I como Informática - I for Information Technology
Vai al PORTALE - Ir a el PORTAL - Go to PORTAL
Stefano Pederzani
Consulenze informatiche Bologna
Automatic barriers and access control
Barriere stradali e controllo accessi
MMS IMPIANTI
Cablaggio strutturato - telefonia
Elettricità - climatizzazione