我有一個.csv包含 2500 個唯一請求 ID 的檔案,如“4485-182-65846”。我想運行包含此請求 ID 的 elasticsearch 查詢命令。我的查詢是這樣的:
curl -XGET 127.0.0.1:9200/_search?pretty -d '
{
"query": {
"match": {
"request_id": "$VARIABLE(contents of the file)"
}
}
}' > answer.csv
現在我想將每個唯一 ID 放入 VARIBALE 并運行查詢以在特定檔案中回答它們
我將不勝感激任何幫助。
我試過這段代碼但沒有回答
request_id=(cat file.csv)
for i in request_id;
do
curl -XGET 127.0.0.1:9200/_search?pretty -d '
{
"query": {
"match": {
"request_id": "$i"
}
}
}' > answer.csv
uj5u.com熱心網友回復:
jq是一個很好的操作 JSON 的工具。例如,假設您的 file.csv 的內容是:
4485-182-65846
4485-182-65847
4485-182-65848
4485-182-65849
4485-182-65850
您可以通過以下方式使用這些值生成 JSON:
$ json_template='{ "query": { "match": { "request_id": "$id" }}}'
$ while read -r id ; do req=$(echo $json_template | jq --arg jqid "$id" '.query.match.request_id |= $jqid'); echo "$req" ; done <file.csv
生成的 JSON 如下所示:
{
"query": {
"match": {
"request_id": "4485-182-65846"
}
}
}
while read...然后,您可以通過將回圈更改為以下方式在 HTTP 查詢中使用 JSON :
while read -r id ; do req=$(echo '{ "query": { "match": { "request_id": "$id" }}}' | jq --arg jqid "$id" '.query.match.request_id |= $jqid'); curl -XGET https://127.0.0.1:9200/_search?pretty -d "$req" ; done <file.csv
(請注意,除了 @user1934428 標識的代碼之外,您的代碼還有其他奇怪之處。您的 GET URL 沒有https協議。)
uj5u.com熱心網友回復:
謝謝你們的關注和回答,這對我有用:
VAR=$(cat file1.txt)
for i in $VAR;
do
curl --user userpasswrd:password -XGET "http://127.0.0.1:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"match": {
"log.request_id": '$i'
}
}
}' >> answer.csv
注意:我必須使用 UTF8 編碼保存 file1.txt,并將所有請求 ID 放在雙引號之間
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/536287.html
上一篇:Bash提取json的第一個鍵
