Tengo líneas en un registro similar a:
2015/11/02-07:55:39.735 INFO failed with ERR_AUTHORIZATION_REQUIRED. (10.10.10.11:61618) is not a trusted source.
2015/11/02-07:55:40.515 INFO failed with ERR_AUTHORIZATION_REQUIRED. (10.10.10.11:51836) is not a trusted source.
2015/11/02-07:55:39.735 INFO failed with ERR_AUTHORIZATION_REQUIRED. (10.10.10.10:61615) is not a trusted source.
2015/11/02-07:55:40.515 INFO failed with ERR_AUTHORIZATION_REQUIRED. (10.10.10.10:51876) is not a trusted source.
2015/11/02-07:55:39.735 INFO failed with ERR_AUTHORIZATION_REQUIRED. (10.10.10.10:61614) is not a trusted source.
2015/11/02-07:55:39.735 INFO failed with ERR_AUTHORIZATION_REQUIRED. (10.10.10.15:61614) is not a trusted source.
2015/11/02-07:55:39.735 INFO failed with ERR_AUTHORIZATION_REQUIRED. (10.10.10.15:61618) is not a trusted source.
2015/11/02-07:55:39.735 INFO failed with ERR_AUTHORIZATION_REQUIRED. (10.10.10.15:61613) is not a trusted source.
Entonces, probé el siguiente comando para obtener el recuento de cada IP única, ordenada:
grep ERR_AUTHORIZATION_REQUIRED file.log | awk '{print $6}' | cut -s -d ':' -f1 | tr -d '(' | sort | uniq -c
Sin embargo, el resultado que obtengo es similar al siguiente:
3 10.10.10.10
2 10.10.10.11
3 10.10.10.15
Entonces es como si la IP se ordenara antes de aplicar uniq -c
(lo cual tiene sentido dado el comando), pero si cambio los comandos uniq
y sort
, cada IP se imprime con un recuento de 1
.
Respuesta1
Desde la uniq
página de manual:
DESCRIPTION
Discard all but one of successive identical lines from INPUT (or standard input), writing to OUTPUT (or standard output).
Aquí la palabra crítica es "sucesiva". No busca duplicados en ningún punto de la secuencia, sólo aquellos que siguen inmediatamente. La clasificación obliga a que todos los duplicados estén uno al lado del otro, para que puedan eliminarse (y contarse).