首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套main循环,输入来自shell脚本中的main main

嵌套main循环,输入来自shell脚本中的main main
EN

Stack Overflow用户
提问于 2018-04-27 02:56:35
回答 2查看 84关注 0票数 1

我有Json文件,我试图使用下面的解析它

代码语言:javascript
运行
复制
#!/bin/ksh
while read rec
 do
    while read line
    do
        firstname=`echo $line | sed -n -e 's/^.*\(full-name\)/\1/p' | cut -f3 -d'"'`
        id=`echo $line | sed -n -e 's/^.*\(id\)/\1/p' | cut -f3 -d'"'`
        echo "${firstname}'|'${id}"
        done < `echo $rec | nawk 'gsub("}}}}", "\n")' | sed 's/{"results"//g'`

done < /var/tmp/Cloud_test.txt

我的示例文件是:

{"results":[{"general-info":{"full-name":"TELOS管理,"body":{"party":{"xrefs":{"xref":{"id":"66666"}}}}},"_id":"91002551"},{"_id":"222222","body":{"party":{"general-info":{"full-name":"DO重用},“xref”:{“xref”:{“id”:“777777”}

预期结果:

TELOS管理66666

请重复使用x 777777

在传递参数时,我在内部面临问题。它不会一行行地通过。其通过的完整行和结果并不像预期的那样出现。请帮忙把它修好。

EN

回答 2

Stack Overflow用户

发布于 2018-04-27 04:45:59

这是一个更复杂(双)的情况的这个问题

以下几点对我来说是可行的:

cat sample.json | sed -e 's/"full-name"/\n&/g' | tail -n+2 | sed -e 's/"full-name":"\([^"]*\).*{"id":"\([^"]*\).*/\1\|\2/'

票数 0
EN

Stack Overflow用户

发布于 2018-04-27 07:24:57

正如@10b0所指出的那样,这种问题最好使用JSON感知工具(如jq )来解决。因此,这里是一个jq解决方案。

但是,必须指出的是,样本输入异常不规则,因此要求不那么清楚。如果JSON更有规律,那么jq解决方案就会更简单。

在任何情况下,以下jq过滤器都会产生所描述的结果:

代码语言:javascript
运行
复制
.results[]
| ..
| objects
| select(has("general-info"))
| [(.["general-info"]|.["full-name"]), (.. | .id? // empty)]
| join("|")

简化

以上第二行可简化为:

代码语言:javascript
运行
复制
[."general-info"."full-name", (.. | .id? // empty)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50054547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档