【发布时间】:2022-01-21 21:14:51
【问题描述】:
需要一些解决方案来在 CSV 文件的特定列中用逗号替换管道,该列也具有一些作为管道分隔字符串的键值(可以是任意数量,一个或多个)。
基本上需要替换不在大括号内的管道,即{subStringX441|subStringX442|subStringX443|subStringX444}应该保持不变。
不能使用简单的sed -i -e 's\|\,\g' filename,因为它将替换所有管道。
输入:
column1,column2,column3,column4,column5,column6,column7
stringX1,stringX2,stringX3,stringX41|stringX42|stringX43|stringX44={subStringX441|subStringX442|subStringX443|subStringX444}|stringX45,stringX5,stringX6,stringX7
stringY1,stringY2,stringY3,stringY41|stringY42|stringY43|stringY44={subStringY441|subStringY442|subStringY443}|stringY45,stringY5,stringY6,stringY7
所需的输出:
column1,column2,column3,column4a,column4b,column4c,column4d,column4e,column5,column6,column7
stringX1,stringX2,stringX3,stringX41,stringX42,stringX43,stringX44={subStringX441|subStringX442|subStringX443|subStringX444},stringX45,stringX5,stringX6,stringX7
stringY1,stringY2,stringY3,stringY41,stringY42,stringY43,stringY44={subStringY441|subStringY442|subStringY443},stringY45,stringY5,stringY6,stringY7
【问题讨论】:
-
欢迎使用 StackOverflow。我可以建议你看看help center,尤其是How do I format my posts using Markdown or HTML?吗?
-
通常的解决方案是使用 CSV 解析器,但您的示例数据看起来并不像有效的 CSV。因此,您必须首先定义如何识别数据中的 列。也许 awk 解决方案会更合适,但如果不了解更多关于您的数据的信息,很难推荐可靠的解决方案。