嵌套while循环,在shell脚本中使用main输入

时间:2018-04-27 02:56:35

标签: json shell while-loop nested-loops do-while

我正在使用Json文件,我正尝试使用下面的

来解析它
printf("LEFT:");
// Copy chars bitMessage 0-5 to l 0-5
for(i = 0; i < 6; i++){
    l[i] = bitMessage[i];
    printf("%c", l[i]);
}
printf("\n");
printf("RIGHT:");
// Copy chars bitMessage 6-11 to r 0-5
for(i = 6; i < 12; i++){
    r[i - 6] = bitMessage[i];
    printf("%c", r[i - 6]);
}

我的示例文件是:

{“results”:[{“general-info”:{“full-name”:“TELOS MANAGEMENT”,“body”:{“party”:{“xrefs”:{“xref”:[{“ ID “:” 66666 “}]}}}},” _ ID “:” 91002551 “},{” _ ID “:” 222222" , “体”:{ “方”:{ “一般信息”:{“全-name“:”DO REUSE“},”外部参照“:{”xref“:[{”id“:”777777“}]}}}}]}

预期结果:
TELOS MANAGEMENT | 66666
DO REUSE | 777777

传递参数时我在内部遇到问题。它没有逐行传递。它通过完整的线,结果没有按预期进行。请帮助解决问题。

2 个答案:

答案 0 :(得分:0)

这是this question更复杂(双重)的情况。

以下适用于我:

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

答案 1 :(得分:0)

正如@ l0b0所指出的,这种问题最好使用JSON感知工具解决,例如jq。那么,这是一个jq解决方案。

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

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

db.myCollection.aggregate(
    [ 
        { "$graphLookup": { 
            "from": "myCollection", 
            "startWith": "$name", 
            "connectFromField": "name", 
            "connectToField": "parent", 
            "as": "descendants"
        }},
        { "$match": { "name": "someValue" } }, 
    ]
)

   GraphLookupOperation graphLookupOperation = GraphLookupOperation.builder()                    .from(mongoOperations.getCollectionName(MyCollection.class))
                    .startWith("name")
                    .connectFrom("name")
                    .connectTo("parent")
                    .as("descendants");
            MatchOperation matchStage = Aggregation.match(new Criteria("name").is("someValue));
            Aggregation aggregation = Aggregation.newAggregation(graphLookupOperation, matchStage);
            List<ClassDefinitionDocument> results = mongoOperations.aggregate(aggregation, mongoOperations.getCollectionName(MyCollection.class), MyCollection.class).getMappedResults();

简化

上面的第二行可以简化为:

results