Использование jq для получения значения, затем использование этого значения в качестве ключа для получения другого значения - PullRequest
1 голос
/ 31 марта 2019

У меня есть несколько сотен таксономических идентификаторов, и я использую curl и jq для извлечения соответствующих значений из http://taxonomy.jgi -psf.org / tax / accession .

Есть ли способ передать jq себе, чтобы я мог использовать значение «level» в качестве ключа для другого запроса?

В этом примере я хотел бы объединить эти две команды в одну:

$ curl -s http://taxonomy.jgi-psf.org/tax/tax_id/48479 | jq '.[] | .level'

"без ранга"

$ curl -s http://taxonomy.jgi-psf.org/tax/tax_id/48479 | jq '.[] | ."no rank".name'

"образцы окружающей среды"

Ответы [ 2 ]

2 голосов
/ 31 марта 2019

Вы можете использовать level значение свойства в качестве ключа:

$ curl -s http://taxonomy.jgi-psf.org/tax/tax_id/48479 | jq '.[] | .["\(.level)"].name'
"environmental samples"
0 голосов
/ 02 апреля 2019

, если хотите, вот альтернативное решение для вашего запроса: использование jtc утилита unix:

bash $ curl -s http://taxonomy.jgi-psf.org/tax/tax_id/48479 | jtc -w'<level>l<val>v[^0]<val>t[name]'
"environmental samples"
bash $ 

Разбивка прогулочной дорожки (-w)

  • <level>l найти элемент JSON по метке level
  • <val>v - запомнить найденное значение в пространстве имен под именем val (может быть любым)
  • [^0] сбросить путь поиска обратно в корень JSON
  • <val>t найти элемент JSON по тегу (метке), хранящемуся в пространстве имен, как val
  • [name] выбрать name запись из найденного объекта JSON
...