Juh*_*han 7 shell sed shell-script csv
文件 1
12584,"Capital of America, Inc.",,HORIZONCAPITAL,USA,......etc
25841,"Capital of America, Inc.",,HORIZONCAPITAL,USA,......etc
87455,"Capital of America, Inc.",,HORIZONCAPITAL,USA,......etc
Run Code Online (Sandbox Code Playgroud)
输出
12584|Capital of America, Inc.||HORIZONCAPITAL|USA|......etc
25841|Capital of America, Inc.||HORIZONCAPITAL|USA|......etc
87455|Capital of America, Inc.||HORIZONCAPITAL|USA|......etc
Run Code Online (Sandbox Code Playgroud)
我有一个 csv 文件,我必须将其转换为用管道(|)分隔的文本文件我已经完成了 shell 脚本 sed 's/^/"/;s/,/|/g;s/$/"/' $File > $Output
但问题在于“美国资本公司”这一领域。包含一个逗号,也用竖线 (|) 代替。所以我只想用管道替换所有内容,除了不在值内的值被赋予双引号“”。
是否有任何shell脚本可以做到这一点?
Kus*_*nda 22
使用csvkit
:
$ csvformat -D '|' file.csv
12584|Capital of America, Inc.||HORIZONCAPITAL|USA|......etc
25841|Capital of America, Inc.||HORIZONCAPITAL|USA|......etc
87455|Capital of America, Inc.||HORIZONCAPITAL|USA|......etc
Run Code Online (Sandbox Code Playgroud)
csvkit
是用 Python 编写的 CSV 操作/查询工具的集合。这些进行正确的 CSV 解析,csvformat
并可用于用任何其他字符替换默认的逗号分隔符。该实用程序将确保根据 CSV 规则正确引用结果。
至少在基于 Debian 的系统上,您应该能够安装基于 OCaml 的 csvtool
$ csvtool -u '|' cat file.csv
12584|Capital of America, Inc.||HORIZONCAPITAL|USA|......etc
25841|Capital of America, Inc.||HORIZONCAPITAL|USA|......etc
87455|Capital of America, Inc.||HORIZONCAPITAL|USA|......etc
Run Code Online (Sandbox Code Playgroud)
你也可以使用 Perl 的Text::CSV
模块:
$ perl -MText::CSV -lne '
BEGIN{$p = Text::CSV->new()}
print join "|", $p->fields() if $p->parse($_)
' file.csv
12584|Capital of America, Inc.||HORIZONCAPITAL|USA|......etc
25841|Capital of America, Inc.||HORIZONCAPITAL|USA|......etc
87455|Capital of America, Inc.||HORIZONCAPITAL|USA|......etc
Run Code Online (Sandbox Code Playgroud)