Cómo agregar búsquedas múltiples en el comando AWK

Cómo agregar búsquedas múltiples en el comando AWK

Estoy intentando buscar los archivos creados en los meses de junio, julio y agosto. utilicé este método

ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'

pero no funciona.

Respuesta1

Puedes combinar varios patrones como este:

awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)

Esto devuelve todas las coincidencias de junio, julio o agosto. No es necesaria la printdeclaración ya que esa es awkla acción predeterminada.

Respuesta2

Como regla general, es una muy mala ideaanalizar la salida de ls. Una mejor manera de hacer lo que quieres es

stat -c "%n %y" * | grep 2013-0[678]

Alternativamente, marque solo el último campo para protegerse contra el improbable caso de que el nombre del archivo en sí sea una fecha:

stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/' 

De man stat:

   -c  --format=FORMAT
          use the specified FORMAT instead of the default; output  a  new‐
          line after each use of FORMAT

   %y     time of last modification, human-readable
   %n     file name

Respuesta3

lses un comando para mostrar información sobre archivos en un formato legible por humanos.No lo utilices en guiones..

El comando para buscar archivos en un árbol de directorios que coincidan con ciertos criterios esfind. Si tiene una búsqueda GNU (es decir, Linux o Cygwin no integrado) o una búsqueda FreeBSD (es decir, FreeBSD u OSX), puede utilizarla -newermtpara buscar archivos que se modificaron por última vez después de una fecha determinada.

find . -newermt '1 June' ! -newermt '1 September' -print

Agregue un año si desea hacer coincidir archivos de un año específico, en lugar del año calendario en el que se ejecuta el script.

Si su implementación de búsqueda no tiene -newermt, tendrá que conformarse con -newer, que compara la fecha del archivo findencontrado con un archivo fijo. Úselo touchpara crear archivos temporales con la fecha que desea usar como límite.

dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"

información relacionada