Posso canalizar um "tail -f" com dados mistos contendo JSONs para jq para visualizar JSONs?

Posso canalizar um "tail -f" com dados mistos contendo JSONs para jq para visualizar JSONs?

Estou jogando há algum tempo e pesquisando mas não consigo encontrar uma solução. Eu tenho alguns logs enormes, onde às vezes também existem JSONS enormes. Mas para simplificar imagine o seguinte:

mkdir logs
cd logs/
echo "$(date) [INFO] something" >> huge_log.log
echo "$(date) [INFO] something more" >> huge_log.log
echo "$(date) [INFO] Something with json: {\"foo\": \"bar\"}" >> huge_log.log
tail -n 5 -f huge_log.log | how_to_filter? | jq '.'

É possível ver algo assim (o json como saída de jq '.' seria):

Tue Aug 18 12:42:24 CEST 2020 [INFO] something
Tue Aug 18 12:42:29 CEST 2020 [INFO] something more
Tue Aug 18 12:43:05 CEST 2020 [INFO] Something with json: 
{
    "foo": "bar"
}

Então, de alguma forma, detecte automaticamente os jsons ao imprimir o log e mostre-os como seria a saída para:

echo "{\"foo\": \"bar\"}" | jq '.'
{
  "foo": "bar"
}

Responder1

O exemplo abaixo funcionou para o seu exemplo e parece razoável para mim. Estou iterando cada linha do arquivo de log e se uma linha corresponder ao regex "{.*}", ela será identificada como um objeto json e formatada com jq. Se o regex não corresponder, ele será impresso normalmente. Eu testei, funciona muito bem também para arquivos maiores e mais complexos.

tail -n 15 huge_log.log | while read line ; do if echo $line | egrep "\{.*}" >/dev/null;json=$(echo $line | egrep -oh "\{.*}" | jq '.');then echo $line | awk -v json="$json" -F "\{.*}" '{printf "%s\n%s\n%s\n",$1,json,$2}'; fi;  done

informação relacionada