【发布时间】:2019-02-15 10:01:49
【问题描述】:
我的目标是用 .txt 文件中的用户名列表卷曲我新创建的 API,然后接收 API 响应,将其保存到 .json,最后创建一个 .csv(为了更容易阅读) .
这是我的脚本:
echo "$result" | jq 'del(.id, .Time, .username)' | jq '{andres:[.[]]}' > newresult
输入:sudo bash script.sh usernames.txt
用户名.txt:
test1
test2
test3
test4
结果:
"id","username"
4,"test4"
期望的结果:
"id","username"
1,"test1"
2,"test2"
3,"test3"
4,"test4"
它根据需要创建文件,甚至保存结果。但是,它只输出 1 个结果。我可以在 CSV/Json 运行时打开它,并看到它正在查询不同的用户名,但是当它开始另一个查询时,而不是将其全部附加到同一个文件中,它会删除 Newresult、Result.json、Results.csv、并创建新的,这意味着最后,我只得到一个用户名的结果,而不是例如 5 个列表。有人可以告诉我我做错了什么吗?
谢谢!
【问题讨论】:
-
>不预期附加。它的文档明确表示它会截断。 -
...也就是说,这段代码真的可以在很大程度上被重写——做一大堆就地操作真的很糟糕。如果您喜欢
jq,也许将逻辑转移到一个 jq 调用中,而不是涉及这么多 shell?这段代码中有很多东西,比如cat x | sponge x,只是没有明显的目的或用途。请参阅minimal reproducible example 指南——问题中的代码应该是尽可能短的代码,让其他人在自己运行时看到手头的问题(显然,有人无法运行依赖于example.com他们自己)。 -
...srsly,虽然——我认为这段代码没有理由多次调用
jq,在那个实例中完成所有工作。但是,要实际提供一个经过测试的示例,我们需要 API 结果,这些结果未包含在此处(但是如果不可能将问题简化为根本不包含任何 API 使用) minimal reproducible example 将包含,也许通过将curl替换为仅返回硬编码示例文档的函数。 -
有关构建最短的代码以让其他人重现问题的进一步指导,请参阅sscce.org 的“修剪技巧”部分。