Temos o seguinte arquivo de exemplo (arquivo muito longo, este é um exemplo curto)
"request_status" : "FAILED"
{
"href" : "http://localhost:8080/api/v1/clusters/sys41/requests/333",
"Requests" : {
"cluster_name" : "sys41",
"id" : 333,
"request_status" : "COMPLETED"
}
},
{
"href" : "http://localhost:8080/api/v1/clusters/sys41/requests/334",
"Requests" : {
"cluster_name" : "sys41",
"id" : 334,
"request_status" : "FAILED"
}
},
{
"href" : "http://localhost:8080/api/v1/clusters/sys41/requests/335",
"Requests" : {
"cluster_name" : "sys41",
"id" : 335,
"request_status" : "FAILED"
}
},
{
"href" : "http://localhost:8080/api/v1/clusters/sys41/requests/336",
"Requests" : {
"cluster_name" : "sys41",
"id" : 336,
"request_status" : "COMPLETED"
}
}
como imprimir a linha após a linha que corresponde, "id" : $num
por exemplo, para
num=335
como pegar a linha depois
"id" : $num
Saída esperada
"request_status" : "FAILED"
Supondo que o arquivo JSON seja uma grande matriz de objetos, como
(observando que as novas linhas não são significativas e nem a ordem das chaves em um objeto), o seguinte
jq
comando obteria arequest_status
entradaid
correspondente a$num
:Ele faz isso selecionando todas as
Requests
entradas de cada objeto e filtrando-as no arquivoid
. Para os que passam no filtro, ele extrairequest_status
.A
-r
opção de gerarjq
dados brutos em vez de JSON (FAILED
teria sido aspas duplas sem ele).Material bônus:
Dada a variável shell
num
definida igual a335
:Obtenho muita quilometragem com
grep
as opções-A
,-B
e , e-C
os mnemônicos para os quais uso são "Depois", "Antes" e "Contexto".grep -A n 'pattern' file
mostrará as n linhas após uma correspondência de padrão, além da própria linha correspondente.grep -C n 'pattern' file
mostrará as n linhas antes de uma correspondência de padrão, além da própria linha correspondente.grep -C n 'pattern' file
mostrará as n linhas antes e depois (ou seja, o contexto de) uma correspondência de padrão, além da própria linha correspondente.ou
ou
ou
ou qualquer um dos anteriores, mas sem precisar da
"id" : "
parte da string, na forma: