Como adicionar várias pesquisas no comando AWK

10

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.

Por favor, ajude-me a corrigir a sintaxe.

    
por OmiPenguin 29.09.2013 / 09:06

3 respostas

12

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

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

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

    
por 29.09.2013 / 09:12
5

Como regra geral, é uma péssima ideia analisar 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 proteger contra o caso improvável em que o próprio nome do arquivo é 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
    
por 29.09.2013 / 14:23
3

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

O comando para localizar arquivos em uma árvore de diretórios que atenda a determinados critérios é find . Se você tiver o GNU find (isto é, Linux ou Cygwin não integrado) ou FreeBSD find (por exemplo, FreeBSD ou OSX), você pode usar -newermt para corresponder 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 corresponder arquivos em um ano específico, em vez do ano civil em que o script é executado.

Se a sua implementação de localização não tiver -newermt , você terá que se contentar com -newer , que compara a data do arquivo que find encontrou 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"
    
por 30.09.2013 / 02:47