Aqui está uma maneira de obter o tempo que durou o maior número de hits:
Atribua uma variável, highest
ao seu comando original: * adicionando ^
no padrão grep, restringe correspondências a datas no início de uma linha.
highest=$(grep "^2017-02-22" "LogFile.log" | cut -c1-20 | uniq -c | sort -n | tail -n1)
Novamente, usando o comando original, até uniq
, redirecione a lista completa uniq
count para tempfile
grep "^2017-02-22" "LogFile.log" | cut -c1-20 | uniq -c >tempfile
Use grep para pesquisar o número mais alto no novo tempfile
usando -A1
para obter a primeira linha depois:
grep -A1 "^$highest" tempfile | tail -n1
Você pode combiná-los em uma linha usando ponto e vírgula (;) da seguinte forma:
highest=$(grep "^2017-02-22" "LogFile.log" | cut -c1-20 | uniq -c | sort -n | tail -n1);grep "^2017-02-22" "LogFile.log" | cut -c1-20 | uniq -c >tempfile;grep -A1 "^$highest" tempfile | tail -n1
Se você precisa fazer a matemática de data e hora para a saída da diferença de tempo real, você pode capturar o resultado até agora para uma variável nexttime
nexttime=$(highest=$(grep "^2017-02-22" "LogFile.log" | cut -c1-20 | uniq -c | sort -n | tail -n1);grep "^2017-02-22" "LogFile.log" | cut -c1-20 | uniq -c >tempfile;grep -A1 "^$highest" tempfile | tail -n1)
e use isso para calcular a diferença:
highest=$(echo $highest | cut -d' ' -f 3) # get the time field (#3)
nexttime=$(echo $nexttime | cut -d' ' -f 3) # get the time field (#3)
logStart=$(date -u -d "$highest" +"%s") # convert to seconds
logEnd=$(date -u -d "$nexttime" +"%s") # convert to seconds
date -u -d "0 $logEnd sec - $logStart sec" +"%H:%M:%S" # display time difference
E, da mesma forma, você pode combinar essas instruções com as outras acima, usando ponto-e-vírgula (;) ou colocar tudo em um script.