首页 > 解决方案 > 结合 awk 智能范围和 jq

问题描述

我有一个包含以下json格式的多行文件,我想通过管道jq提取几个字段。

格式是,

{"userData":[{"user":{"loginName":"TEST",....]}.

{"userData":[{"user":{"loginName":"TEST1",....]}.

....代表“一些”json数据。

我可以提取awk '/{\"userData\"/{p=1}; p; /}\./{p=0};'似乎打印得很好的线条。

我遇到的困难是jq在每一行上运行并提取json字段。如何使用单个awk命令来实现这一点?

标签: awkjq

解决方案


如果这些句点实际上出现在行尾,那么该文件的内容就不是纯粹的 json。如果该文件中的每一行都是一个单独的 json 对象,后跟一个句点,您可以读取原始文件(将文件中的每一行作为字符串作为输入传递),去掉句点,然后解析 json 并处理像平常一样。

例如,转储所有用户登录名:

$ jq -R '.[:-1] | fromjson | .userData[].user.loginName' input.txt

推荐阅读