jq - 从流中提取匹配文档的子集
jq - extracting a subset of matching documents from a stream
我有以下 JSON 消息。这是一条完整的消息。一个文件中有很多这样的消息。此 json 消息是使用 jq 从未格式化的 json 消息生成的。
{
"header": {
"user": "baskar"
},
"requests": [
{
"first_name": "mike",
"last_name": "mat"
},
{
"first_name": "mike",
"last_name": "mat"
}
],
"check": [
"Y"
]
}
{
"header": {
"user": "baskar"
},
"message": {
"header": {
"user": "baskar"
},
"response": {
"resultsList": {
"result": [
{
"first_name": "mike1",
"last_name": "mat"
}
]
},
"errorMsg": null
}
}
}
我想对此做一些过滤。例如,当我搜索 first_name、mike1 时,我应该在请求中获取 header 和匹配的请求。也是 Response 消息中的匹配结果。因此,搜索字符串 mike1 的预期输出如下。
{
"header": {
"user": "baskar"
},
"requests": [
{
"first_name": "mike1",
"last_name": "mat"
}
],
"check": [
"Y"
]
}
{
"header": {
"user": "baskar"
},
"message": {
"header": {
"user": "baskar"
},
"response": {
"resultsList": {
"result": [
{
"first_name": "mike1",
"last_name": "mat"
}
]
},
"errorMsg": null
}
}
}
基本上,我想过滤掉请求数组中不匹配的请求和结果数组中不匹配的结果。
目前,我使用以下脚本从未格式化的 json 消息日志文件中获取格式化的 json 消息。
sed -n "/<SEARCH_STRING>/ s/.*Service - //p" /test.log* | jq . > ~/result.log
谢谢,
Baskar.S
jq --arg key first_name \
--arg value mike1 \
'select(.message.response.resultsList.result[]?[$key]==$value) | .message' \
<in.json
...returns 仅消息内容,其中结果列表至少包含 mike1
中的 first_name
个。
我有以下 JSON 消息。这是一条完整的消息。一个文件中有很多这样的消息。此 json 消息是使用 jq 从未格式化的 json 消息生成的。
{
"header": {
"user": "baskar"
},
"requests": [
{
"first_name": "mike",
"last_name": "mat"
},
{
"first_name": "mike",
"last_name": "mat"
}
],
"check": [
"Y"
]
}
{
"header": {
"user": "baskar"
},
"message": {
"header": {
"user": "baskar"
},
"response": {
"resultsList": {
"result": [
{
"first_name": "mike1",
"last_name": "mat"
}
]
},
"errorMsg": null
}
}
}
我想对此做一些过滤。例如,当我搜索 first_name、mike1 时,我应该在请求中获取 header 和匹配的请求。也是 Response 消息中的匹配结果。因此,搜索字符串 mike1 的预期输出如下。
{
"header": {
"user": "baskar"
},
"requests": [
{
"first_name": "mike1",
"last_name": "mat"
}
],
"check": [
"Y"
]
}
{
"header": {
"user": "baskar"
},
"message": {
"header": {
"user": "baskar"
},
"response": {
"resultsList": {
"result": [
{
"first_name": "mike1",
"last_name": "mat"
}
]
},
"errorMsg": null
}
}
}
基本上,我想过滤掉请求数组中不匹配的请求和结果数组中不匹配的结果。
目前,我使用以下脚本从未格式化的 json 消息日志文件中获取格式化的 json 消息。
sed -n "/<SEARCH_STRING>/ s/.*Service - //p" /test.log* | jq . > ~/result.log
谢谢, Baskar.S
jq --arg key first_name \
--arg value mike1 \
'select(.message.response.resultsList.result[]?[$key]==$value) | .message' \
<in.json
...returns 仅消息内容,其中结果列表至少包含 mike1
中的 first_name
个。