Listar arquivos que contenham menos de N linhas correspondentes a um padrão / string

0

EDITADO

Estou procurando um comando para usar o GREP e o FIND para atingir a condição abaixo.

Cada arquivo de log contém o padrão de seqüência de caracteres "226 transferência concluída", que ocorre duas vezes. Em alguns arquivos, ocorre apenas uma vez ou nulo. Eu preciso capturar a lista de nomes de arquivos com zero e uma ocorrência. O comando a seguir funciona APENAS se o padrão de pesquisa não for encontrado no arquivo (ou seja, para contar apenas 'ZERO').

find . -type f -name "*.log" ! -exec grep -q "226 Transfer complete." {} \; - print

Estou usando a versão grep (GNU grep) 2.20. Eu preciso capturar os resultados no arquivo de texto também.

    
por bala yuva 24.01.2017 / 19:38

2 respostas

2

grep -lR '226 Transfer complete\.' --include='*.log'
    
por 24.01.2017 / 19:46
2

Você pode usar awk para contar ocorrências e imprimir o nome do arquivo se a contagem for menor que n :

find . -type f -name \*.log -exec awk -vn=2 'BEGIN{c=0};
/PATTERN/{++c; if (c==n){exit}};END{if (c<n){print FILENAME}}' {} \;

Isso irá parar de contar assim que forem encontrados n (neste caso 2 ) correspondências.

    
por 24.01.2017 / 23:22

Tags