![Como adicionar múltiplas pesquisas no comando AWK](https://rvso.com/image/50595/Como%20adicionar%20m%C3%BAltiplas%20pesquisas%20no%20comando%20AWK.png)
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 print
instrução, pois essa é awk
a 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 -newermt
para 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 find
encontrado com um arquivo fixo. use touch
para 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"