On Tue, Nov 10 2015, Hugo Florentino wrote:

> Hola colegas,
>
> Supongamos que ejecuto este comando
> sed -r 's/.* SRC=(\S+) .* DPT=(80|443) .*/\1\t\2/g' 
> /var/log/firewall.log | sort -t . -k1,1n -k2,2n -k3,3n -k4.4n | uniq -c 
> | sed -r 's/^\s+(\S+)\s+/\1\t/g'

El «-k4.4n» no te funciona, porque lo q separa el último octeto del
número de puertos es un solo carácter de tabulación. Así q las
direcciones con menos de tres dígitos en el último octeto usarán al
menos un dígito del puerto para ordenar.

Mi recomendación: usa un punto en vez de una tabulación, y con eso
puedes fácilmente usar la columna del puerto para ordenar. También
ordena por el puerto desde el principio, o habrá casos «uniq» no
agrupará correctamente por no estar consecutivos.

Te quedaría la cuenta q hace «uniq», q con «tr» y/o «sed» debes
resolver, y de ahí ordernar como quieres (q sería como el primero, pero
adicionando el criterio de la nueva columna).

Al final, bueno, puedes usar «cut», «sed» o un simple «while IFS=. read
...»  para reformatear la salida a tu gusto (o de tu jefe).

Para el orden reverso, fíjate bien en el manual ;)

Te puedo enviar la solución q tengo en mente, pero es mejor cuando la
haces tú.

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