Что такое Grep, чтобы убрать все строки, НО, название и страну - PullRequest
0 голосов
/ 27 апреля 2020

Мой файл имеет следующий шаблон.

 [
{
    "id": 8050879,
    "coord": { "lon": -1.65825, "lat": 42.808472 },
    "country": "ES",
    "geoname": { "cl": "P", "code": "PPLL", "parent": 6359749 },
    "name": "Iturrama",
    "stat": { "level": 1.0, "population": 24846 },
    "stations": [
      { "id": 5493, "dist": 4, "kf": 1 },
      { "id": 28697, "dist": 32, "kf": 1 }
    ],
    "zoom": 14
  },
{
    "id": 5406990,
    "coord": { "lon": -122.064957, "lat": 37.906311 },
    "country": "US",
    "geoname": { "cl": "P", "code": "PPL", "parent": 5339268 },
    "langs": [
      { "bg": "Уолнът Крийк" },
      { "de": "Walnut Creek" },
      { "en": "Walnut Creek" },
      { "eo": "Walnut Creek" },
      { "link": "http://en.wikipedia.org/wiki/Walnut_Creek%2C_California" },
      { "post": "94595" }
    ],
    "name": "Walnut Creek",
    "stat": { "level": 1.0, "population": 64173 },
    "stations": [
      { "id": 374, "dist": 9, "kf": 1 },
      { "id": 10103, "dist": 9, "kf": 1 },
    ],
    "zoom": 11
  },
...
]

Я хотел бы получить

[
{
 "country": "ES",
"name": "Iturrama"
},
{
 "country": "US",
"name": "Walnut Creek"
},
...
]

Я использовал grep -v id имя-файла> результат, а затем grep -v координат результат > result grep -v geoname result> result ... пока я не получу свой шаблон, но я заметил, что удаляю все, что имеет идентификатор на нем, поэтому, если у меня есть имя: "cIDadel", оно будет также удалено.

Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Не используйте инструменты, не поддерживающие синтаксис, такие как grep, для анализа структурированных данных, таких как JSON. Он не может дифференцировать базовые типы, т.е. объект / массив или любой другой. Используйте правильный синтаксический анализатор, такой как jq, используя который вы можете просто сделать

jq 'map({country, name})' json_file

Посмотрите, как он работает в jq-plays . Скачать инструкцию и настроить довольно просто - Скачать jq

0 голосов
/ 27 апреля 2020

Если вам по какой-то причине нужно использовать инструменты оболочки вместо анализа JSON, используйте AWK. file.awk

/^\[$/ {print($0)}
/^\{$/ {print($0)}
/"country"/ {print($0)}
/"name"/ {print($0)}
/^ *\},$/ {print($1)}
/^\]$/ {print($0)}

Звоните:

awk -f file.awk yourdata.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...