7 votos

grep, sed de encontrar un valor entero por encima de una determinada cantidad?

Esto es en referencia a otra pregunta: ¿Cómo puedo usar robocopy a la lista de todos los archivos de un tamaño determinado de forma recursiva?

Me gustaría analizar la salida de un comando (o gato un archivo de registro) y encontrar un valor de cadena, convertirlo a un número entero y luego ver si el valor entero es mayor que un entero dado.

Por ejemplo, dada la línea:

      *EXTRA File          78223    C:\_Google.Enterprise.Contract.2010-06-01.pdf

Me gustaría comparar '78223' a '10485760'. Es esto posible con grep o sed?

Gracias!

14voto

MikeyB Puntos 26178

Uso awk como sigue:

$ echo '*EXTRA File     78223    C:\foo.pdf' | awk '$3 > 1048576 {print $0;}'
$ echo '*EXTRA File     78223    C:\foo.pdf' | awk '$3 > 40000 {print $0;}'
*EXTRA File     78223    C:\foo.pdf

3voto

mfinni Puntos 29745

También, si usted está usando un Unix-like userland (como UnxUtils o Cygwin, si estás en Windows), puede utilizar find con la -size parámetro para obtener la lista de archivos directamente, y luego de la tubería a xargs y hacer lo que estamos tratando de hacer con los archivos seleccionados.

La respuesta general a la pregunta (comparaciones interesantes y otras operaciones) es, de hecho, awk o bash (con bc) o perl - pero la situación específica en la que se presta a find.

2voto

astrostl Puntos 517

En pura Bash:

while read -r _ _ size _; do ((size > 10485760)) && echo "hit"; done < foo.log

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: