jq - вывод значений в одну строку

# first generate a comma-separated list of matching PIDs
pids=$(ps a -o pid,args | awk '/[f]wk/ {print $1}' | xargs | sed -e 's/ /,/g')
# then run top with that list
top -p $pids

ПРИМЕЧАНИЕ: если какие-либо fwk* процессы были запущены за короткое время между генерацией списка и запуском top, они не будут включены в отображение.

4
24.06.2018, 00:01
2 ответа
$ jq -r '.[] |
      [ "name:",.name ], [ "groups:",.grp[].name ]
      | @tsv' file.json
name:   cust1
groups: BA2     GA1     NA1     TR3     TS1

То есть дайте @tsvдва массива, один с именем, а другой с группами. Каждый массив станет отдельной строкой.

В случае, если массив grpможет быть пустым и вы хотите вместо него вставить -:

$ jq -r '.[] |
      [ "name:",.name ], [ "groups:", (.grp // [])[].name // "-" ]
      | @tsv' file.json
name:   cust1
groups: -

Операция x // yвозвращает x, если только xне дает nullили false, и в этом случае она возвращает y.

Это также будет обрабатывать случай, когда grpполностью отсутствует (а не просто пустой массив ).

5
27.01.2020, 20:47

Используйте "объединение",-j

$ jq -jr '.[]|"name:", " ",.name, "\n","groups:", (.grp[]|" ",.name),"\n"' test_json
name: cust1
groups: BA2 GA1 NA1 TR3 TS1

И с заполнителем

$ jq -jr '.[]|"name:", " ",.name, "\n","groups:", (.grp//[{"name":"-"}]|.[]|" ",.name),"\n"' test_json
name: cust1
groups: -
19
27.01.2020, 20:47

Теги

Похожие вопросы