如何从文件中的每一行获取第一个单词到一个变量中,卷曲它并将输出附加到一个新文件
How to get first word from each line in file into a variable, curl it and append the output to a new file
我有一个格式如下的文件:
{"cat":["bat","mat","hat"]}
{"dog":["frog","clog"]}
{"mouse":["house"]}
..等等更多(约 50 多行)这样的行。
我想获取每行中的第一个单词(例如 cat),然后 运行 在 URL 上用那个单词卷曲(例如 curl https://urlHere='"$ {animalVariableHere}") 所以每行的第一个词应该放在 URL 中,其中写着“${animalVariableHere}”。一旦 curl 在 URL 上 运行,我就想得到那个输出(卷曲 URL 在 JSON 中给出一行 - 例如 {"type":"animal ,"info":{"house pet","furry","brown"}}),尤其是“info”部分,放入类似于以下内容的新文件中:
"cat": "house pet","furry","brown"
因此,使用上述 3 条输入线的最终输出将是:
"cat": "house pet","furry","tabby"
"dog": "house pet","furry","golden retriever"
"mouse": "house pet","tail","pygmy"
到目前为止,我已经尝试查看是否可以使用 'awk' 命令获取每行中的第一个单词,但它根本不起作用/我不完全确定如何我正在学习 shell 脚本。但是每写一个词,我就想用管道来表达它,即:
<first word> | curl 'https://urlHere'"${animalVariableHere}" | jq -r '.info' | tee -a outputFile
我也不确定如何将动物变量与信息输出相匹配。任何帮助将不胜感激,谢谢
使用jq
,keys_unsorted[0]
会给你第一个键,--arg
让你从外部导入值。使用 bash
,您可以使用 while
.
逐行循环
jq -r 'keys_unsorted[0]' input.json | while read -r animalVariableHere
do curl 'https://urlHere'"${animalVariableHere}" \
| jq --arg id "${animalVariableHere}" -r '@csv "\([$id]): \(.info)"'
done > output.txt
假设 curl
输出有效 JSON,即它看起来更像 {"type":"animal","info":["house pet","furry","brown"]}
.
您需要一个可以解析 JSON.
的工具
示例 jq
#!/bin/bash
while IFS='' read -r animal
do
curl "https://urlHere=$animal" |
jq --arg a "$animal" '$a + ": " + (.info | join(", "))'
done < <(jq -r 'keys[0]' file.json) > output.json
我有一个格式如下的文件:
{"cat":["bat","mat","hat"]}
{"dog":["frog","clog"]}
{"mouse":["house"]}
..等等更多(约 50 多行)这样的行。
我想获取每行中的第一个单词(例如 cat),然后 运行 在 URL 上用那个单词卷曲(例如 curl https://urlHere='"$ {animalVariableHere}") 所以每行的第一个词应该放在 URL 中,其中写着“${animalVariableHere}”。一旦 curl 在 URL 上 运行,我就想得到那个输出(卷曲 URL 在 JSON 中给出一行 - 例如 {"type":"animal ,"info":{"house pet","furry","brown"}}),尤其是“info”部分,放入类似于以下内容的新文件中:
"cat": "house pet","furry","brown"
因此,使用上述 3 条输入线的最终输出将是:
"cat": "house pet","furry","tabby"
"dog": "house pet","furry","golden retriever"
"mouse": "house pet","tail","pygmy"
到目前为止,我已经尝试查看是否可以使用 'awk' 命令获取每行中的第一个单词,但它根本不起作用/我不完全确定如何我正在学习 shell 脚本。但是每写一个词,我就想用管道来表达它,即:
<first word> | curl 'https://urlHere'"${animalVariableHere}" | jq -r '.info' | tee -a outputFile
我也不确定如何将动物变量与信息输出相匹配。任何帮助将不胜感激,谢谢
使用jq
,keys_unsorted[0]
会给你第一个键,--arg
让你从外部导入值。使用 bash
,您可以使用 while
.
jq -r 'keys_unsorted[0]' input.json | while read -r animalVariableHere
do curl 'https://urlHere'"${animalVariableHere}" \
| jq --arg id "${animalVariableHere}" -r '@csv "\([$id]): \(.info)"'
done > output.txt
假设 curl
输出有效 JSON,即它看起来更像 {"type":"animal","info":["house pet","furry","brown"]}
.
您需要一个可以解析 JSON.
的工具示例 jq
#!/bin/bash
while IFS='' read -r animal
do
curl "https://urlHere=$animal" |
jq --arg a "$animal" '$a + ": " + (.info | join(", "))'
done < <(jq -r 'keys[0]' file.json) > output.json