如何双引号文本文件中的所有字段?

时间:2013-07-25 15:13:20

标签: perl shell csv command-line tab-delimited

我正在寻找一种快速有效的方法来双重引用制表符分隔或逗号分隔的文本文件中的所有字段。

理想情况下,这可以是我可以从命令行运行的Perl单行程序,但我对任何解决方案都持开放态度。

3 个答案:

答案 0 :(得分:6)

使用Text::CSV

perl -MText::CSV -e'
  my $c = Text::CSV->new({always_quote => 1, binary => 1, eol => "\n"}) or die;
  $c->print(\*STDOUT, $_) while $_ = $c->getline(\*ARGV)' <<'END'
foo,bar, baz qux,quux
apple,"orange",spam, eggs
END

输出:

"foo","bar"," baz qux","quux"
"apple","orange","spam"," eggs"

此处always_quote选项非常重要。

答案 1 :(得分:3)

如果您的文件不包含任何包含分隔符的双引号字符串,则可以使用

perl -laF, -ne '$" = q(","); print qq("@F")'

答案 2 :(得分:0)

awk -F, -v OFS='","' -v q='"' '{$0=q$0q;$1=$1}7' file

例如,逗号sep:

kent $ echo "foo,bar,baz"|awk -F, -v OFS='","' -v q='"' '{$0=q$0q;$1=$1}7'
"foo","bar","baz"

tab sep会是类似的。