O que há de errado com este comando xargs?

1

Estou tentando essas duas variações:

cat /var/log/zwave.log | xargs -n1 jq '.' 

&:

</var/log/zwave.log xargs -n1 jq '.' 

Parece que o comando é executado, mas tenta abrir a linha como um local de arquivo. Isso faz sentido para o segundo comando que eu listei, mas para o primeiro usando um pipe não deve agir como se cada linha em zwave.log fosse canalizada para jq '.' ?

O sistema de registro que estou processando, mas não tem controle sobre a produção, cria um objeto json em cada linha do arquivo de log:

{ "name": "PeriodicWork", "hostname": "myHost", "pid": 12189.20, "level": 20, "msg": "Executing [CheckFailedTask NodeId=8]", "time": "2017-12-04T00:20:30.953Z", "v": 0 }

Mas o agente de log ocasionalmente falha e produz algo como Unable to start service: [TimeoutError: operation timed out] .

É por isso que não posso usar apenas jq no arquivo.

    
por Philip Kirkbride 04.12.2017 / 23:14

1 resposta

1

Não use xargs.

jq '.' /var/log/zwave.log

Se você precisar filtrar apenas linhas json, use grep na frente dele

grep -E "^{" test.txt | jq '.' 

Xargs é para anexar cada linha como um argumento para o comando fornecido; é basicamente equivalente a:

jq '.' $LINE1
jq '.' $LINE2
jq '.' $LINE3

que é o que você está vendo. Você deve usar xargs quando o arquivo contiver uma lista de outros arquivos ou argumentos que você deseja passar para um comando.

    
por 04.12.2017 / 23:20

Tags