Primeiro, observe que você não precisa da chamada para grep
, a propósito: ela pode ser perfeitamente integrada à chamada awk
.
<logfile awk '/endQuery/ {print $3 " " $1}'
Você pode filtrar as consultas banidas no estágio do awk. Armazene consultas em andamento em uma matriz, remova-as se elas forem banidas e apenas imprima as não proibidas.
<logfile awk '
$2 == "startQuery" {q[$1]=1} # store the names of active queries
q[$1] && /banned/ {delete q[$1]} # delete banned queries
$2 == "endQuery" {
if (q[$1]) print $3, $1; # only report non-banned queries
delete q[$1];
}
' | sort -nr | head -n 3