我有以下命令:
echo "column1, column2, column3" > test.csv &&
cat data.json | jq -r '. | [.["column1"], .["column2"], .["column3"]] | @csv’ >> test.csv
Run Code Online (Sandbox Code Playgroud)
它创建一个列标题和来自data.json.
我还尝试添加它,例如它只会"abc"从column3.
我添加了|select(.column3| startswith ('ab'))所以完整的命令是:
echo "column1, column2, column3" > test.csv &&
cat data.json | jq -r '. | [.["column1"], .["column2"], .["column3"]] |select(.column3| startswith ('ab')) | @csv’ >> test.csv
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
-bash: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)
我的 json.data 看起来像这样:
-bash: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)
我如何解析column3?不知道我做错了什么。
在将对象转换为数组之前过滤更容易@csv:
$ (echo "column1,column2,column3";
jq -r 'select(.column3 | startswith("ab"))
| [.column1, .column2, .column3]
| @csv' data.json) > test.csv
$ cat test.csv
column1,column2,column3
"hello","bye","abc"
Run Code Online (Sandbox Code Playgroud)
但是,如果您确实想先转换为数组,则必须select使用适当的数组索引:
jq -r '[.column1, .column2, .column3]
| select(.[2] | startswith("ab"))
| @csv' data.json
Run Code Online (Sandbox Code Playgroud)
请注意我如何将echo和括jq在一组括号中,以便它们都在同一个子shell 中运行,并在其外部重定向输出,而不必重定向两个命令的输出。还摆脱了无用的猫;jq将输入文件名作为参数。即使没有,输入重定向也比cat.