2017-08-28 1 views
0

zu Elasticsearch Hochladen habe ich eine ndjson-Datei mit dem folgenden FormatInsert-Header für jedes Dokument vor

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

ich einen Header wie

{"index": {}} 

vor jedem Dokument hinzufügen möchten, bevor die Masse mit Operation fand ich eine ähnliche Frage: Elasticsearch Bulk JSON Data

Die Lösung ist dieser jq Befehl:

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

Aber ich bekomme diese Fehlermeldung:

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

Was mache ich falsch? Im laufenden Windows Oder gibt es eine bessere Lösung? Dank

Antwort

1

Die while in Ihrem Beispiel ist ein Konstrukt, das in der Regel eine entwicklerfreundliche Shell wie z. sh, bash oder zsh, aber Windows bietet nicht out of the box. See the bash docs for example.

Also, wenn dies eine einmalige Sache ist, ist wahrscheinlich die schnellste Lösung, nur einige Texteditor zu verwenden und die erforderlichen Aktionslinien hinzuzufügen, indem Sie einige Multi-Cursor-Funktionalität verwenden.

Auf der anderen Seite, wenn Sie auf Windows beschränkt sind, aber eine bessere Shell verwenden möchten, sollten Sie einen Blick auf die cmder project werfen, die Ihnen eine Bash-Umgebung auf Ihren Windows-Desktop bringt, wenn Sie den vollen verwenden Version, die mit Git-for-Windows verpackt ist. Dies sollte Ihnen erlauben, solche Skripting-Funktionen auch in einer Nicht-Linux- oder Mac-Umgebung zu verwenden.