将.csv文件的上下文作为变量逐行分配到linux命令脚本中

5cnsuln7  于 2022-11-22  发布在  Linux
关注(0)|答案(2)|浏览(130)

我有一个.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
yqhsw0fo

yqhsw0fo1#

jq是一个很好的处理JSON的工具。

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"
    }
  }
}

然后,您可以在HTTP查询中使用JSON,方法是将while read...循环更改为:

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

(Note,您的程式码除了@user1934428所识别的以外,还有其他奇怪的地方。您的GET URL没有https通信协定。)

r3i60tvu

r3i60tvu2#

谢谢大家的关注和回答,这对我很有效:

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放在双引号中

相关问题