如何删除 CSV 中某个字段的逗号?

0 text-processing csv

我正在使用名为 name 的 CSV 文件中有一个字段/列,这始终是第二个字段。

此列中的值如下:“Smith,John”“Brady,Tom”“Manning,Peyton”等

如何在不使用逗号的情况下(例如“Smith John”或“Brady Tom”)并保留所有内容不变?我尝试过使用 sed awk 但无法弄清楚。

Kus*_*nda 6

如果字段被正确引用(如您所示),那么嵌入的逗号不应该成为问题(假设您使用支持 CSV 的解析器读取数据)。

如果您仍然认为需要删除名为 的字段中的逗号name,请使用支持 CSV 的解析器(例如csvkitMiller ( mlr))来处理数据。

这是使用 Miller 的示例:

mlr --csv put '$name = gsub($name, ",", "")' file.csv
Run Code Online (Sandbox Code Playgroud)

这将从 CSV 中读取数据file.csv,使用与您所发现的类似的替换函数来awk删除名为 的字段中的所有逗号name,然后输出可能修改的记录。

例子:

$ cat file.csv
age,name,note
47,"Hatter, Mad","Isn't actually ""mad"""
39,"Rabbit, White",Drinks too much tea
2,"Dormouse, The",Sleeps most of the time
$ mlr --csv put '$name = gsub($name, ",", "")' file.csv
age,name,note
47,Hatter Mad,"Isn't actually ""mad"""
39,Rabbit White,Drinks too much tea
2,Dormouse The,Sleeps most of the time
Run Code Online (Sandbox Code Playgroud)

对于csvformat(来自 csvkit)和tr,以下内容将通过暂时将文档的分隔符更改为分号来删除所有逗号:

csvformat -D ';' file.csv | tr -d , | csvformat -d ';'
Run Code Online (Sandbox Code Playgroud)

例子:

$ csvformat -D ';' file.csv | tr -d , | csvformat -d ';'
age,name,note
47,Hatter Mad,"Isn't actually ""mad"""
39,Rabbit White,Drinks too much tea
2,Dormouse The,Sleeps most of the time
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用(也来自 csvkit)通过一些 SQLcsvsql仅从字段中删除逗号:name

csvsql --query 'UPDATE file SET name = REPLACE(name, ",", "")' \
    --query 'SELECT * FROM file' file.csv
Run Code Online (Sandbox Code Playgroud)