使用 bash 删除 jsonpath 模板中的逗号

remove comma in jsonpath template using bash

我有一个 JSON 路径模板查询。

oc get event jsonpath='{range .items[*]},{@.name}{","}{@.message}{","}{@.evenname}'{"\n"}{end}'> /tmp/test.csv

我正在将其重定向到 csv。

name1,message of event one,eventname1
name2,message of,event,two,eventname2
name3,message of event three,eventname3
name4,message of, event four,eventname4

从上面的输出中获取消息中的逗号,我想用 space 替换 bash 脚本中第二列(消息)的逗号。

任何人都对如何实现这一点有任何想法。

预期结果

name1,message of event one,eventname1
name2,message of event two,eventname2
name3,message of event three,eventname3
name4,message of event four,eventname4

假设您可以将字段分隔符更改为已知数据中不存在的字符(例如,|),您现在将生成:

name1|message of event one|eventname1
name2|message of,event,two|eventname2
name3|message of event three|eventname3
name4|message of, event four|eventname4

从这里我们可以使用 seda) remove/replace ,<space> 然后 b)| 替换为 ,:

$ sed 's/[ ]*,[ ]*/,/g;s/,/ /g;s/|/,/g'

注意: 需要 s/[ ]*,[ ]*/g 来解决去除重复空格的额外要求(如果我们替换 [=17=,就会出现在第 4 行中) ] <space>)

应用于生成的数据时:

name1,message of event one,eventname1
name2,message of event two,eventname2
name3,message of event three,eventname3
name4,message of event four,eventname4

使用awk的另一个选项(对于使用,作为字段分隔符的OP的当前数据):

awk -F',' '                              # input field delimiter = ","
{ x=","                                # start new string as field #1 + ","

  sep=""                                 # initial separator = "" for fields 2 to (NF-1)

  for (i=2;i<NF;i++) {                   # loop through fields 2 to (NF-1)
      gsub(/^[ ]+|[ ]+$/,"",$i)          # trim leading/trailing spaces
      x=x sep $i                         # append current field to x along with sep
      sep=" "                            # use " " as separator for rest of fields
  }

  printf "%s,%s\n", x, $NF               # print "x" plus "," plus the last field (NF)
}'

应用于生成的数据时:

name1,message of event one,eventname1
name2,message of event two,eventname2
name3,message of event three,eventname3
name4,message of event four,eventname4