Как я могу получить указанные c поля из полей в JSON файле? - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть файл с именем test, который я создаю, извлекая информацию с помощью cURL следующим образом:

curl "https://example.com/public?command=getInfo" > test | python -m json.tool > test

, и это приводит к чему-то вроде этого:

{
    "A_B": {
        "Field1": "0.36564104",
        "Field2": "0.00000580",
        "Field3": "0.00000558",
        "Field4": 177,
        "Field5": "0"
    },
    "B_A": {
        "Field1": "19.02374743",
        "Field2": "0.00049000",
        "Field3": "0.00047179",
        "Field4": 253,
        "Field5": "0"
    },
    "A_C": {
        "Field1": "19.02374743",
        "Field2": "0.00049000",
        "Field3": "0.00047179",
        "Field4": 253,
        "Field5": "0"
    }
    ...
}

Мне нужно получить от A_B и A_ C Field2 и Field5. Поэтому я попытался использовать живой редактор AWK, но пока лучшее, что мне удалось, это

-F "[, ]+" '/A_B/{print $2,$5}'

То есть я не добился реального прогресса, и, конечно, он не работает .

Моя цель - сохранить в два файла с именами test2 и test3, которые будут выглядеть примерно так:

test2:

A_B: 0.00000580
A_C: 0.00049000

test3:

A_B: 0
A_C: 0

содержит значения Field2 в test2 и Field5 в test3, но пока я застрял.

Любая помощь приветствуется!

1 Ответ

1 голос
/ 09 февраля 2020

Использование jq :

jq -r '"A_B: \(.A_B["Field2"])", "A_C: \(.A_C["Field2"])"' test > test2

Объяснение: Команда

jq -r '.A_B["Field2"]' test

извлекает значение 0.00000580 из Field2 из A_B и "A_B: \(…)" добавляет буквальную строку A_B: в качестве префикса. То же самое происходит с полем A_C, которое печатается на следующей строке. Вывод перенаправляется в файл test2.

Эквивалентная команда для field5 и выходной файл test3:

jq -r '"A_B: \(.A_B["Field5"])", "A_C: \(.A_C["Field5"])"' test > test3
...