jq Wyjście warunkowe

84

Używam jq do zabawy z json. Zastanawiałem się, jak warunkowo coś w tym wydrukować.

Powiedzmy, że jestem zainteresowany rozmową w terenie geo. Użyłem następującego polecenia i stwierdziłem, że jest tylko jeden wpis, który geoto null:

% cat all.json | jq '.geo != null' | sort | uniq -c              
   1 false
6891 true

Jak mogę wydrukować tylko ten wpis bez drukowania wszystkiego innego?

Nie widziałem czegoś takiego jak printpolecenie w instrukcji. I to nie działa: cat all.json | jq 'if .place == null then . end'. jqskarżył się na błąd składni.

clwen
źródło

Odpowiedzi:

144

Możesz użyć funkcji wyboru, aby uzyskać tylko wymagane wpisy:

jq 'select(.geo != null)' all.json
max taldykin
źródło
22
Wybór działa, ale aby w pełni odpowiedzieć na pytanie, musisz ponownie przefiltrować tylko dane geograficzne, umieszczając rurowanie wewnątrz jq:cat all.json | jq 'select(.geo != null) | .geo' > geo-only.json
Andy Reagan