我正在寻找一种快速有效的方法来双引号制表符分隔或逗号分隔的文本文件中的所有字段。
理想情况下,这将是我可以从命令行运行的 Perl 单行程序,但我愿意接受任何类型的解决方案。
我正在寻找一种快速有效的方法来双引号制表符分隔或逗号分隔的文本文件中的所有字段。
理想情况下,这将是我可以从命令行运行的 Perl 单行程序,但我愿意接受任何类型的解决方案。
使用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
选项在这里很重要。
如果您的文件不包含任何包含分隔符的双引号字符串,您可以使用
perl -laF, -ne '$" = q(","); print qq("@F")'
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 将是相似的。