On Tue, Nov 10 2015, Hugo Florentino wrote:
[...]
>> También ordena por el puerto desde el principio, o habrá casos «uniq»
>> no agrupará correctamente por no estar consecutivos.
>
> Es que justamente deseo que uniq agrupe principalmente por ip

O agrupas por los dos, o por uno solo, no hay un principal.  Ahora q me
haces pensar más en esto, me doy cuenta q el primer ordenamiento es
simplemente para agrupar las entradas iguales, así q se podría
simplificar.

> , la idea es tener en orden descendente para cada equipo que intenta
> acceder a un puerto la cantidad de intentos (de ahi el argumento -c),
> solo que los resultados deseo luego ordenarlos por puerto, intentos
> (descendente) y dirección ip.

Para eso es la segunda invocación de «sort».

> Agradecería que me pusieras como lo harias tu, aun no acabo de cogerle 
> la vuelta al comando sort cuando se trata de combinar varios criterios.

OK.

#+BEGIN_SRC sh
sed -r 's/.* SRC=(\S+) .* DPT=(80|443) .*/\1.\2/g' /var/log/firewall.log
| sort  # [1]
| uniq -c
| sed -r 's/^\s+(\S+)\s+/\1./' # [2]
| sort -t. -k2,2n -k3,3n -k4,4n -k5,5n -k1,1rn -k6,6n
| sed -r 's|^(\S+)\.|\1\t|;s|\.(\S+)$|\t\1|' # [3]
#+END_SRC

[1] solo necesitamos agrupar cadenas identicas
[2] sin «g» pues está anclada al inicio
[3] use un separador diferente para q sea más fácil de leer la expresión
    regular

Prueba y dime, y dispara para acá con cualquier duda.

Servilio


______________________________________________________________________
Lista de correos del Grupo de Usuarios de Tecnologías Libres de Cuba.
Gutl-l@jovenclub.cu
https://listas.jovenclub.cu/cgi-bin/mailman/listinfo/gutl-l

Responder a