Как отсортировать вывод json в моем случае - PullRequest
1 голос
/ 05 марта 2020

Это команда, которую я использую в Ubuntu для извлечения данных из исходного json файла:

    cat results.json | jq -s -c 'sort_by(.name) | .[]'

И вот что я получил:

{"name":"I-1","node_id":"458d3d44-9d70-473d-87ae-9cd419277c92","console":5005}
{"name":"I-10","node_id":"c655c49b-083e-46e7-8866-08020761ffac","console":5023}
{"name":"I-11","node_id":"5f62ce93-48ff-420e-9876-e92c01e3d1df","console":5025}
{"name":"I-12","node_id":"af9000dd-0653-4c5d-91ae-def37a95d0fb","console":5027}
{"name":"I-13","node_id":"5ad2301d-688d-4d70-9d35-07b421f4f893","console":5029}
{"name":"I-14","node_id":"2f1fcc75-e642-496a-a822-0d6d0cb46376","console":5031}
{"name":"I-15","node_id":"720c786c-8a38-4c0c-93b7-33850160837c","console":5033}
{"name":"I-16","node_id":"20516282-7cad-43d8-999b-3c20b1e6c3bd","console":5035}
{"name":"I-17","node_id":"e33fa2c1-d36e-4933-ab92-0dad99e2a276","console":5037}
{"name":"I-18","node_id":"4215fe76-1b6b-457d-8a38-85e51b4c53ec","console":5039}
{"name":"I-19","node_id":"351f85c2-7c9c-4847-b15c-43d35d5bdbcd","console":5041}
{"name":"I-2","node_id":"49253898-e628-4ed8-9268-69e6a0b01105","console":5007}
{"name":"I-20","node_id":"0575b79c-4060-4ded-ad69-e5da6bcd4d8b","console":5043}
{"name":"I-21","node_id":"4ba799eb-e48b-49f3-8bb1-65605be85061","console":5045}
...

Как можно ли отсортировать вывод численно по этому «имени» значению? Thanx. -Джек

Ответы [ 2 ]

3 голосов
/ 05 марта 2020

Решение только для jq:

< results.json jq -s -c '
    sort_by(.name|sub("I-";"") | tonumber) | .[]'
1 голос
/ 05 марта 2020

Вот подход для вас, но это не чистый JQ.

cat results.json | jq -s -c '.[]' | sort -k1.12 -n

Поскольку я видел, что вы используете unix, сортировка выполняется командой сортировки:

sort -k1.12 -n

Вот объяснение:

-k1.12 Define a restricted sort key that has the starting position field1, in this case position 12
-n Sort fields numerically by arithmetic value

Вывод:

{"name":"I-1","node_id":"458d3d44-9d70-473d-87ae-9cd419277c92","console":5005}
{"name":"I-2","node_id":"49253898-e628-4ed8-9268-69e6a0b01105","console":5007}
{"name":"I-10","node_id":"c655c49b-083e-46e7-8866-08020761ffac","console":5023}
{"name":"I-11","node_id":"5f62ce93-48ff-420e-9876-e92c01e3d1df","console":5025}
{"name":"I-12","node_id":"af9000dd-0653-4c5d-91ae-def37a95d0fb","console":5027}
{"name":"I-13","node_id":"5ad2301d-688d-4d70-9d35-07b421f4f893","console":5029}
{"name":"I-14","node_id":"2f1fcc75-e642-496a-a822-0d6d0cb46376","console":5031}
{"name":"I-15","node_id":"720c786c-8a38-4c0c-93b7-33850160837c","console":5033}
{"name":"I-16","node_id":"20516282-7cad-43d8-999b-3c20b1e6c3bd","console":5035}
{"name":"I-17","node_id":"e33fa2c1-d36e-4933-ab92-0dad99e2a276","console":5037}
{"name":"I-18","node_id":"4215fe76-1b6b-457d-8a38-85e51b4c53ec","console":5039}
{"name":"I-19","node_id":"351f85c2-7c9c-4847-b15c-43d35d5bdbcd","console":5041}
{"name":"I-20","node_id":"0575b79c-4060-4ded-ad69-e5da6bcd4d8b","console":5043}
{"name":"I-21","node_id":"4ba799eb-e48b-49f3-8bb1-65605be85061","console":5045}
...