linux - 仅从 CSV 文件的第 2 行和第 3 行中删除多余的逗号

标签 linux shell csv unix

我有一个逗号分隔文件(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 中执行此操作???

最佳答案

这是一种使用 sed 的方法:

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

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

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

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

关于linux - 仅从 CSV 文件的第 2 行和第 3 行中删除多余的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38005586/

相关文章:

linux - 哪个命令找不到可执行的Unix脚本

Bash:欺骗程序认为 stdout 是一个交互式终端

bash - 按出现次数排序

c++ - 使用 C++ 读取带有两个连续分隔符的 csv 文件

python - 如何在 Pandas 数据框中显示汉字?

python - 如何使用 Python 删除/去除我的 csv 文件中的白色/空白行?

linux shell脚本大小写参数输入

python - python如何与linux交互?

linux - 访问 nginx、ubuntu 17 的文件夹 jenkins 工作区

linux - 如何在 shell 脚本中进行比较?