【问题标题】:Remove extra commas from only 2nd and 3rd row of CSV file仅从 CSV 文件的第 2 行和第 3 行删除多余的逗号
【发布时间】:2016-06-24 04:26:11
【问题描述】:

我有一个逗号分隔文件(CSV 文件)test.csv,如下所示。

FHEAD,1,2,3,,,,,,
FDEP,2,3,,,,,,,,
FCLS,3,,,4-5,,,,,,,
FDETL,4,5,6,7,8,
FTAIL,5,67,,,,,,

我只想从文件的第 2 行和第 3 行中删除空列,即记录是否以 FDEPFCLS 开头,仅在我想删除空列 (,,) 的那些行中。

删除空列后,同一文件 test.csv 应如下所示

FHEAD,1,2,3,,,,,,
FDEP,2,3
FCLS,3,4-5
FDETL,4,5,6,7,8,
FTAIL,5,67,,,,,,

如何在 Unix 中做到这一点???

【问题讨论】:

  • 这有什么更新吗?
  • 哇,你太懒了。你没有付出任何努力;只需“为我编写此代码!”和“有什么更新吗?”。

标签: linux shell csv unix


【解决方案1】:

这是一种使用 sed 的方法:

sed '/^F\(DEP\|CLS\),/ { s/,\{2,\}/,/g; s/,$// }'

我们使用/^F\(DEP\|CLS\),/ 的范围,即以下命令将只处理匹配^F\(DEP\|CLS\), 的行。此正则表达式匹配字符串开头,然后是 F,然后是 DEPCLS,然后是 ,。换句话说,我们查找以FDEP,FCLS, 开头的行。

找到这样一行后,我们首先替换(s 命令)所有运行(g 标志,匹配尽可能多的次数)的 2 个或更多(\{2,\})逗号(,)按单个 , 排列。这会将,,, 压缩为单个,

其次,我们将字符串末尾的, 替换为空。这消除了任何尾随逗号。

【讨论】:

    猜你喜欢
    • 2018-05-12
    • 2021-03-27
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2013-12-10
    • 2015-03-11
    相关资源
    最近更新 更多