Циклический просмотр массива JSON в сценарии оболочки с использованием цикла for

Можно сделать:

paste_with_header() (
  IFS=$(printf '\t') # or IFS=$'\t' with some shells
  printf '%s\n' "$*"
  paste -- "$@"
)

paste_with_header text_file* > all_data.txt

"$*"расширен до списка позиционных параметров (аргументы функции )объединены с первым символом $IFS, который мы установили в TAB, символ, который pasteтакже использует для соединения строки файла.

Чтобы удалить расширения файлов в заголовке, с помощьюzsh:

paste_with_header() (
  printf '%s\n' ${(pj:\t:)@:r}
  paste -- "$@"
)
  • ${@:r}заменяется корневым именем (расширение удаляется )каждого позиционного параметра.
  • j:\t:флаг расширения параметра для присоединения к \t. С p, что \tинтерпретируется какTAB

Или с ksh93, zshили bash, предполагая, что файлы имеют расширение или что ни один каталог в их компонентах пути не содержит точек:

paste_with_header() (
  IFS=$'\t'
  printf '%s\n' "${@%.*}"
  paste -- "$@"
)

${@%.*}удаляет самую короткую завершающую часть, которая соответствует .*в конце каждого из позиционных параметров.(foo.txtстановится foo, но имейте в виду, что ./fooстановится пустой строкой ).

(те, очевидно, предполагают, что имена файлов не содержат табуляций или символов новой строки ).

-1
07.01.2020, 09:32
1 ответ
jq -r '.aggregations."2".buckets[] | select(.doc_count < 100).key' file.json

Это позволит выбрать элементы в массиве .aggregations."2".buckets[], у которых .doc_countменьше 100, а затем получить значение .keyдля каждого из них.

Перенаправьте результат этого в файл, чтобы сохранить его.

1
28.01.2020, 05:09

Теги

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