Eu tenho o arquivo de log abaixo e quero imprimir os nomes apenas dos usuários que conseguiram fazer o login apenas na terceira tentativa.
cat login.log
user1:failed
user2:failed
user3:success
user1:failed
user2:failed
user4:success
user5:failed
user2:success
user3:failed
user6:success
user1:success
user3:success
user4:success
user4:success
user5:failed
user5:failed
user1:success
user2:failed
saída esperada é,
user1
user2
tentar
Onde
-F:
use:
como separador/failed/ { f[$1]++;}
contagem de login com falha para usuário/success/ && f[$1]==2 { print $1; f[$1]=0 ; }
resultado de impressão sob condição.conforme comentário, em caso de nome especial (quebra de linha para facilitar a leitura)
Solução simples apenas do bash: itere sobre as linhas, incrementando um contador para cada falha e, para cada sucesso, verifique o valor desse contador e, se corresponder ao valor desejado, gere alguma saída. Bônus
sort -u
no final para apenas usuários de saída que correspondem, não todas as ocorrências. Possível melhoria seria redefinir o contador para 0 em caso de sucesso - mas você deve ser capaz de descobrir como fazer isso sozinho.Eu manteria o controle de quem fez login, para que não correspondamos a este caso extremo:
A menos que você esteja interessado em qualquer pessoa que faça login após 2 falhas consecutivas, independentemente de logins anteriores. Nesse caso você quer: