【发布时间】:2019-04-03 10:40:11
【问题描述】:
我想在 CSV 文件的所有字段中添加引号。
我的 CSV 文件
$ cat file.csv
1,563,45645,example-text,/example/path,FILE,ftp://,11
预期输出
$ cat file.csv
"1","563","45645","example-text","/example/path","FILE","ftp://","11"
【问题讨论】:
-
请在未来也加入你自己的努力......最简单的是
sed 's/[^,]*/"&"/g' -
这些答案都不是特别健壮的,因为如果在某些字段已经被引用的地方给出输入,它们会中断,所以这里是使用 Text::CSV_XS 模块的 perl 单行:
perl -MText::CSV_XS -e 'my $csv = Text::CSV_XS->new({always_quote=>1});while (my $r = $csv->getline(\*STDIN)) { $csv->say(\*STDOUT, $r) }' < file.csvin有可能的情况 -
@Shawn 您的陈述不正确。我的回答确实解决了这个问题。 Perl 很好!
-
@kvantour 您的 awk 不处理带逗号的引用字段。除非您知道您的输入没有这样的内容(OP 的数据很可能就是这种情况),否则用逗号进行天真的拆分不是处理 CSV 数据的方法。
-
@Shawn 有效点!
标签: csv awk sed text-manipulation