我有一个逗号分隔文件(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 行中删除空列,即记录是否仅在我想要的那些行中以 FDEP
和 FCLS
开头删除空列 (,,)。
删除空列后,相同的文件 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
,后跟 DEP
或 CLS
,再后跟 ,
。换句话说,我们查找以 FDEP,
或 FCLS,
开头的行。
找到这样的一行,我们首先替换(s
命令)所有运行(g
标志,匹配尽可能多的次数)2个或更多(\{2,\}
) 逗号 (,
) 由单个 ,
组成一行。这会将 ,,,
压缩为单个 ,
。
其次,我们将字符串末尾处的 ,
替换为空。这消除了任何尾随逗号。
关于linux - 仅从 CSV 文件的第 2 行和第 3 行中删除多余的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38005586/