杨先森的博客 2020-04-30 15:34 采纳率: 50%
浏览 430
已采纳

如何通过shell语句解析某一列的json并输出里面字段

怎么编写shell语句,将数据中的某一列json格式的数据提取解析出来,并追加在对应的那条数据后面。尽量用shell语言实现,如果有其他简便方法也可以

原始数据内容如下:

335970 | 115 | {"traceid":"0421000841sgm6p","pixeldata":-13075235,"pixelcoordinate":"703,160","pixelabnormaldata":0,"collectedpixeldata":"703,160"}

335971 | 116 | {"traceid":"0421000666sgm6p","pixeldata":-12325235,"pixelcoordinate":"733,144","pixelabnormaldata":1,"collectedpixeldata":"333,132

结果数据:

335970 | 115 | 0421000841sgm6p | -13075235 | 703,160 | 0 | 703,160

335971 | 116 | 0421000666sgm6p | -12325235 | 733,144 | 1 | 333,132

  • 写回答

2条回答 默认 最新

  • 毕小宝 博客专家认证 2020-05-01 08:58
    关注

    使用 awk 的shelll 编程,首先定义一个数据文件 data.log

    335970 | 115 | {"traceid":"0421000841sgm6p","pixeldata":-13075235,"pixelcoordinate":"703,160","pixelabnormaldata":0,"collectedpixeldata":"703,160"} 
    335971 | 116 | {"traceid":"0421000666sgm6p","pixeldata":-12325235,"pixelcoordinate":"733,144","pixelabnormaldata":1,"collectedpixeldata":"333,132 
    

    其次,编写处理命令如下:

    awk -F "|"  -vOFS="|"  '{l=split($3,arr,",\"");$3="";for(i=1;i<=l;i++){ll=split(arr[i],arr2,":"); if(i!=1)$3=$3"|";$3=$3arr2[2]} ;gsub(/\"/,"",$3);gsub(/\}/,"",$3);print }' ./data.log
    

    最后执行结果:
    图片说明

    语法说明,使用 Awk 用 | 连接输出,其中单独对 第三列再处理,最后对无用字符替换,处理逻辑如下;

    {
    l=split($3,arr,",\""); // 对第三列用 ," 分割,得到 JSON 的 key-value
    $3="";
    for(i=1;i<=l;i++){ // 遍历第三列的 JSON 属性
       ll=split(arr[i],arr2,":"); // 再对每一个 key-value 用: 分割
       if(i!=1)$3=$3"|"; // 非第一个 key-value 的时候,需要连接符号 |
       $3=$3arr2[2]} ; // 拼接新的第三例,只取JSON 的 值列
       gsub(/\"/,"",$3); // 替换值的 "
       gsub(/\}/,"",$3); // 替换掉右侧的 }
       print 
    }
    

    不对第三列的最终结果替换是这样的:
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题