首页 > 解决方案 > 仅在出现第二个图案时打印两个图案

问题描述

只有当人有英语科目分数时,如何才能用分数打印姓名。

换句话说,只有当第 2 个模式匹配时,才会对 2 个模式进行 grepping 并打印第一个和第二个模式。

输入:

            {
                "sessionId": "000001",
                "name": "ABC",
                "Age": "21",
                "Score": {
                    "English": "A+",
                    "Mathematics": "B-",
                    "String Theory": "C+"
                }
            },
            {
                "sessionId": "000001",
                "name": "CDE",
                "Age": "21",
                "Score": {
                    "English": "A-",
                    "German": "B-",
                    "French": "C+"
                }
            },
            {
                "sessionId": "000001",
                "name": "EFG",
                "Age": "21",
                "Score": {
                    "German": "A+",
                    "Mathematics": "B-",
                    "Machine Learning": "C+"
                }
            },

输出

"name": "ABC",
"English": "A",
"name": "CDE",
"English": "A",

标签: awksedtext-processing

解决方案


如果您的输入实际上是一个正确的 JSON 数组而不是一个片段:

$ jq -r '.[] | select(.Score.English) | {name: .name, English: .Score.English} | @text' demo.json | sed 's/^{\|}$//g; s/,/\n/'
"name":"ABC"
"English":"A+"
"name":"CDE"
"English":"A-"

推荐阅读