[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Shell, comandos grep y awk



On Sat, 11 Sep 2004 13:15:07 +0200, jamarier@gmail.com
<jamarier@gmail.com> wrote:
> On Fri, 10 Sep 2004 20:33:11 +0200, Iñaki <ibc2@euskalnet.net> wrote:
> > Hola a todos,
> >
> > Estoy intentando pulir el tema de karamba de mi escritorio. Entro otras cosas
> > tengo un campo para visualizar el total descargado de internet desde que se
> > arrancó el sistema. Ahora mismo lo obtengo así:
> >
> >  /sbin/ifconfig eth0 | grep 'RX byte' | awk '{print $7 $8}'
> >
> > Y la salida de esta concatenación de comandos y tuberías es (a modo de
> > ejemplo):
> >
> >  (58.2MiB)
> > ó
> >  (750.5KiB)
> > ó
> >  (1.2GiB)
> >
> > Lo que pretendo es quitar los paréntesis, la "i" de las unidades y separar el
> > valor numérico de las unidades. Es decir:
> >
> >  58.2 MB
> >  750.5 KB
> >  1.2 GB
> 
> Bueno, El sistema internacional de medidas Dice que se ha de emplear
> GiB cuando son GiB y GB cuando son GB. Me explico: no es lo mismo 90º
> que 90 radianes. Por lo que considero que es un mal cambio el quitar
> la 'i'
> 

> Ahora no tengo ningun ifconfig ni ningun perl a mano (si dentro de un rato no dan una
> solución más simple de las que hay puestas te pongo mi solución), pero todo los
> pipes se pueden sustituir por algo del estilo...
> 
Ahora si tengo el perl y el ifconfig a mano.
Mi versión de ifconfig da los datos como tu quieres B-)
así que no hay que hacer mucho.

Mi script probado es el siguiente: (lo separo en 3 lineas por claridad
pero va todo junto.

ifconfig eth0 | 
perl -ne 
"print if s!.*?RX bytes.*?\(([0-9.]*) ([KMG]).*!\1 \2B!"

Esta linea reconoce (12.3 Mb e imprime lo mismo
En tu caso el núcleo del patron sería el mismo solo que eliminando el
espacio detras de ([0-9.]).

¿Explicación? 
El comando s!!! es un patron de sustitución. busca lo que hay entre
los primeros !! y lo sustituye por los segundos !!. Si el cambio es un
éxito devuelve un valor afirmativo. Además del reconocimiento se
almacena los valores que nos interesan ([0-9.]*) es el número y
([KMG]) es la letra de unidades. Sustituyendo la línea entera por
estos dos datos. Si se ha producido sustitución, imprimimos el
resultado. En caso contrario ignoramos la linea y vamos a la siguiente
(eso es debido a la opción -n).

> 
> Yo aprendería un poquito de perl  ;-)
> 
Yo también. ;-)

atte javier m mora



Reply to: