【问题标题】:How to add contains or startswith in jq如何在jq中添加包含或开头
【发布时间】:2020-08-08 20:13:06
【问题描述】:

我有以下命令:

echo "column1, column2, column3" > test.csv &&
cat data.json | jq -r '. | [.["column1"], .["column2"], .["column3"]] | @csv’ >> test.csv

它创建一个列标题和来自data.json 的数据。

我正在尝试将它添加到例如它只会从 column3 中提取包含单词 ("abc") 的数据。

我添加了|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

但我收到以下错误:

-bash: syntax error near unexpected token `('

我的 json.data 看起来像这样:

{
      "column1": "hello",
      "column2": "bye",
      "column3": "abc"
}

如何解析column3?不知道我做错了什么。

【问题讨论】:

  • I added: 你是在哪里以及如何添加它的?请发布您尝试过的完整命令。请发布来自data.json 的示例数据,以便其他人可以测试。
  • 感谢提问,完整命令为:echo "column1, column2, column3" > test.csv && cat data.json | jq -r'。 | [.["column1"], .["column2"], .["column3"]] |select(.column3| 以 ('abc') 开头) | @csv' >> test.csv
  • @KamilCuk 虽然很难提出 Json.data 示例
  • 请给出一个data.json 的指示性示例——一个既具有说明性又足以复制错误的示例。
  • @peak 我添加了 json.data { "column1": "hello", "column2": "bye", "column3": "abc" } 的示例

标签: linux unix jq


【解决方案1】:

在将对象转换为@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"

但如果您确实想先转换为数组,则必须使用适当的数组索引select

jq -r '[.column1, .column2, .column3]
       | select(.[2] | startswith("ab"))
       | @csv' data.json

请注意我如何将echojq 括在一组括号中,以便它们都在同一个子shell 中运行,并且输出重定向在它之外,而不必重定向两个命令的输出。也摆脱了 Cat 的无用用途; jq 将输入文件名作为参数。即使没有,输入重定向也比cat好。

【讨论】:

  • 谢谢你!但是,我猜我正在使用的实际 json 可能不是我想的那样的字符串......因为它给了我以下错误:“startswith() 需要字符串输入”它是一个包含超过百万个条目的 json,所以很难弄清楚它是什么或为什么我得到这个错误。但是您的回答非常有帮助,再次感谢您!
  • 啊,只有几行出现该错误,因此有效。谢谢!
  • @artemisia480 '超过一百万个条目'? '几行'?如果您的实际输入不是具有单个 json 对象的文件,则问题中的示例输入也不应该是单个对象。
  • 我同意你的观点,我真正的 json 非常嵌套和毛茸茸,我很难尝试复制它。我真的很感谢你的回答,它正在工作,所以再次感谢你。
猜你喜欢
  • 2019-08-28
  • 2020-04-29
  • 2020-11-09
  • 2023-03-29
  • 2017-05-21
  • 2022-12-23
  • 1970-01-01
  • 2018-08-10
  • 2022-10-25
相关资源
最近更新 更多