Импортировать каждую строку файла в Elasticsearch с -POST - PullRequest
0 голосов
/ 09 июля 2019

Когда я запускаю эту команду, она буквально отправляет $line в Elasticsearch вместо строк file.txt

cat file.txt | while IFS= read -r line; do curl -d '{ "field" : "$line" }' -H "Content-Type: application/json" -POST "http://localhost:9200/indexname/doc"; done;

file.txt, состоящего из:

This is line one.
This is line two.
This is line three.

Это Elasticsearch 7.2 на Centos 7.

Я пытался экранировать $line, как в \$line и ($line) или "$line"
, но он выставляет фактическое значение \$line и ($line) или "$line"

Ожидаемые данные для помещения в Elasticsearch:

{ "field" : "This is line one." }
{ "field" : "This is line two." }
{ "field" : "This is line three." }

фактические данные, помещенные в Elasticsearch
{ "field" : "$line" }

1 Ответ

0 голосов
/ 11 июля 2019

Я нашел, что это похоже на этот вопрос: Как я могу использовать переменную в вызове curl в скрипте bash и ответить.Спасибо, что этот парень и @ chepner

cat file.txt | while IFS= read -r line; do jq -n --arg var "$line"  '.field = $var'| curl --data @- -H "Content-Type: application/json" -POST "http://localhost:9200/indexname/doc"; done;
...