Вставьте заголовок для каждого документа перед загрузкой в ​​эластичный поиск

У меня есть файл ndjson в следующем формате

{"field1": "data1" , "field2": "data2"}
{"field1": "data1" , "field2": "data2"}
....

Я хочу добавить заголовок, как

{"index": {}}

перед каждым документом перед использованием массовой операции я обнаружил похожий вопрос: Elasticsearch Bulk JSON Data

Решение этой команды jq:

jq -cr ".[]" input.json | while read line; do echo '{"index":{}}'; echo $line; done > bulk.json

Но я получаю эту ошибку:

'while' is not recognized as a internal or external command

Что я делаю неправильно? У меня работает Windows Или есть лучшее решение? Спасибо

1 ответ

while в вашем примере есть конструкция, которая обычно встроена в дружественную для разработчика оболочку, такую ​​как, например, sh, bash или zsh, но windows не предоставляет готовые решения. Смотрите документацию по bash, например.

Так что, если это одноразовая вещь, возможно, самым быстрым решением будет просто использовать текстовый редактор и добавить необходимые строки действий с помощью нескольких функций мульти-курсора.

С другой стороны, если вы ограничены Windows, но хотите, чтобы какая-то лучшая оболочка использовала это чаще, вам следует взглянуть на проект cmder, который предоставляет вам среду bash для рабочего стола Windows при использовании полной версии, которая является упакованный с мерзавцем для окон. Это должно позволить вам использовать такие функции сценариев даже в среде, отличной от Linux или Mac.

Другие вопросы по тегам