我需要从JSON文件textuploader.com/1dchq中提取id
的{{1}},以便得到结果:
"name":"ConsumeKafka"
。
由于限制,我无法使用任何第三方工具。如何使用sed / awk做到这一点?
答案 0 :(得分:2)
$ awk -F '[":,]+' '$2=="id" {id=$3} $2=="name" && $3=="ConsumeKafka" {print id}' file
772658d2-8510-3834-856b-6cfd7e8871f6
772658d2-8510-3834-856b-6cfd7e8871f6
772658d2-8510-3834-856b-6cfd7e8871f6
-F '[":,]+'
-使用任意数量的双引号,冒号或逗号作为字段分隔符。
$2=="id" {id=$3}
-如果第二个字段正好是id
,请保存下一个字段。
$2=="name" && $3=="ConsumeKafka" {print id}
-根据字段2和3打印保存的ID。
如果只需要第一个比赛,请执行{print id; exit}
答案 1 :(得分:1)
您可以使用EvaluateJSONPath
处理器将JSON值提取到流文件属性。使用JSONPath表达式$.processors[?(@.component.name=="ConsumeKafka")].component.id
将ConsumeKafka
id
提取到流文件上的属性。
顺便说一句,我认为您使用的API响应过于通用且太大而无济于事。您可以通过进行更具体的API调用来限制JSON响应中返回的信息更具体。
答案 2 :(得分:0)
您可以从文本文件中执行以下操作:
awk '/"id"/ {print $1}' file
"id":"67e21117-891e-3019-8926-7571b3b0317f",
"id":"67e21117-891e-3019-8926-7571b3b0317f",
"id":"67e21117-891e-3019-8926-7571b3b0317f",
"id":"67e21117-891e-3019-8926-7571b3b0317f",
"id":"a1c4b268-3a6f-3b4c-bf12-0ded10f5d767",
"id":"a1c4b268-3a6f-3b4c-bf12-0ded10f5d767",
"id":"a1c4b268-3a6f-3b4c-bf12-0ded10f5d767",
"id":"a1c4b268-3a6f-3b4c-bf12-0ded10f5d767",
"id":"772658d2-8510-3834-856b-6cfd7e8871f6",
"id":"772658d2-8510-3834-856b-6cfd7e8871f6",
"id":"772658d2-8510-3834-856b-6cfd7e8871f6",
"id":"772658d2-8510-3834-856b-6cfd7e8871f6",