Como adicionar múltiplas pesquisas no comando AWK

Como adicionar múltiplas pesquisas no comando AWK

Estou tentando pesquisar os arquivos criados nos meses de junho, julho e agosto. Eu usei esse método

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

mas não está funcionando.

Responder1

Você pode combinar vários padrões como este:

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

Isso retorna todas as correspondências de junho, julho ou agosto. Você não precisa da printinstrução, pois essa é awka ação padrão de.

Responder2

Como regra geral, é uma péssima ideiaanalisar a saída de ls. A melhor maneira de fazer o que você quer é

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

Como alternativa, marque apenas o último campo para se proteger contra o caso improvável em que o próprio nome do arquivo seja uma data:

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

Responder3

lsé um comando para exibir informações sobre arquivos em formato legível por humanos.Não use em scripts.

O comando para localizar arquivos em uma árvore de diretórios que corresponda a determinados critérios éfind. Se você tiver GNU find (ou seja, Linux ou Cygwin não incorporado) ou FreeBSD find (ou seja, FreeBSD ou OSX), poderá usar -newermtpara combinar os arquivos que foram modificados pela última vez após uma determinada data.

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

Adicione um ano se quiser fazer a correspondência dos arquivos em um ano específico, em vez do ano civil em que o script é executado.

Se a sua implementação find não tiver -newermt, você terá que se contentar com -newer, que compara a data do arquivo findencontrado com um arquivo fixo. use touchpara criar arquivos temporários com a data que você deseja usar como limite.

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

informação relacionada