仅从CSV文件的第2行和第3行删除额外的逗号

时间:2016-06-24 04:26:12

标签: 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中做到这一点?

1 个答案:

答案 0 :(得分:1)

使用sed:

,这是一种方法
sed '/^F\(DEP\|CLS\),/ { s/,\{2,\}/,/g; s/,$// }'

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

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

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