【问题标题】:How to remove an apostrophe ( ' ) from couple of columns of a .CSV file?如何从 .CSV 文件的几列中删除撇号 ( ' )?
【发布时间】:2013-09-10 17:50:58
【问题描述】:

我有一个包含 7 个字段的 .CSV 文件,文件的第 3 列和第 4 列有一个以撇号 ( ' ) 开头的数字。请看下面的例子。

col0,col1,col2,col3,col4,col5,col6,
1value0,1value1,'8972991766941,'8972991766941,1value4,1value5,1value6,
2value0,2value1,'8912988876583,'8912988876583,2value4,2value5,2value6,
3value,3value1,'8912981226981,'8912981226981,3value4,3value5,3value6,
2value0,4value1,'8912971783681,'8912971783681,4value4,4value5,4value6,

如何仅使用 sed 或 awk 去除第 3 列和第 4 列中的撇号?

【问题讨论】:

    标签: linux csv sed awk apostrophe


    【解决方案1】:

    你可以使用awk:

    awk -F, '{for (i=3;i<=4;i++) sub("'\''", "", $i)}1' OFS=, file
    

    【讨论】:

    • 你能解释一下上面代码中的替换是做什么的吗?我看到代码中使用了 3 个撇号。另外,您能否在sed 中提供另一种方法来实现这一目标?
    • 您会看到三个撇号,因为我们必须对其进行转义,否则它将终止字符串。 sed 's/'\''//g' file 是否适合您,还是您只想要第三列和第四列?
    • 所有列都有'stuff 还是只有三个和四个?你能确定第 X 个撇号会在第三列或第四列吗?我问这个是因为您可以执行类似sed s/\'//3 的操作来将每行中的第三个撇号替换为空。如果是这样,那么我们可以使用 sed 可靠地做到这一点。我们可以可靠地做到这一点的另一种情况是第三列和第四列是固定长度
    • @PsychoData:前两列有名称,我不确定这些列中的数据是否有撇号。此外,第 3 列和第 4 列不是固定长度。它们是数字字段,数字的长度可能会有所不同......我们能想到任何其他解决方案吗?
    • @Dhruuv 如果我们不确定是否会说,第三个和第四个撇号,在一行中,并且您需要替换的列不是在另一列中的集合模式,那么我知道没有办法只替换第三列和第四列中的撇号,而不使用 awk 。应该可以使用 awk 打印第一列和第二列,然后使用 sed 替换第三列和第四列中的撇号,然后打印其余列。但是使用 sed 中的 sub 命令已经可以正常工作了。
    【解决方案2】:

    如果根本不需要',请将其从各处删除。

    awk '{gsub("'\''","")}1' file
    

    【讨论】:

    • 我只需要在文件的第 3 列和第 4 列中删除它,因为我不想更改其他字段的数据,以防万一它们可能有撇号他们...谢谢 Jotne。
    【解决方案3】:

    在记事本上按 CTRL+H,将“'”替换为“”(无)

    【讨论】:

    • 他只能使用sed 或awk,因此记事本不太可能在他的环境中可用,也不能像sed 或awk 那样编写脚本。此外,这将从 all 列中删除撇号;他只希望他们离开第 3 列和第 4 列。
    • 感谢 Raza 的回复,但是,就像贾斯汀所说,我必须在 .CSV 文件中删除它,该文件存在于 linux 环境中。
    猜你喜欢
    • 2014-09-12
    • 1970-01-01
    • 2020-11-15
    • 2022-01-08
    • 1970-01-01
    • 2014-02-24
    • 2022-08-11
    • 2011-01-02
    • 2022-01-20
    相关资源
    最近更新 更多