首页 > 解决方案 > 删除 csv [awk,sed] 中未执行列中的逗号

问题描述

有没有一种简单的方法可以删除 csv 中不应该使用 AWK/SED 的逗号?

.csv 由 5 列组成,但额外的逗号使某些行包含 6 列。例如见下文,我希望第三列是数字,但如您所见,第 3 行和第 4 行是字符串。

4,abc,323,123,acvd
4,abc,323,123,acvd
4,ab,c,323,123,acvd
4,db,c,323,123,acvd

我不想过度设计我可以使用 pandas / python 的解决方案。

它也是一个非常大的文件 5GB 文件,百万 + 行所以不是我可以在 excel 中打开的东西。

所需的输出将是添加添加字符串或删除它,即

4,abc,323,123,acvd
4,abc,323,123,acvd
4,abc,323,123,acvd
4,dbc,323,123,acvd

4,abc,323,123,acvd
4,abc,323,123,acvd
4,ab,323,123,acvd
4,db,323,123,acvd

标签: awksed

解决方案


由于删除额外字段是您可以接受的选项:

$ awk 'BEGIN{FS=OFS=","} {print $1, $2, $(NF-2), $(NF-1), $NF}' file
4,abc,323,123,acvd
4,abc,323,123,acvd
4,ab,323,123,acvd
4,db,323,123,acvd

否则:

$ awk 'BEGIN{FS=OFS=","} {print $1, $2 (NF>5 ? $3 : ""), $(NF-2), $(NF-1), $NF}' file
4,abc,323,123,acvd
4,abc,323,123,acvd
4,abc,323,123,acvd
4,dbc,323,123,acvd

推荐阅读