什么是 Miller 命令,用于将电子邮件分隔成各自的行,同时还复制其他列数据?
What is the Miller command for separating emails into their own rows, while also copying down other column data?
我有一个包含很多列的非常大的 csv 文件(213,265 行)。
在其中一列中,我有一些用逗号分隔的电子邮件。 csv 文件的精简版本如下所示:
我想使用 Miller 将这些电子邮件分隔成它们自己的行,但也复制电子表格中的所有其他列(其中许多列未在此简单示例中显示) .
继续这个例子,我想以这样的方式结束。但请记住,真实的电子表格在电子邮件列之前和之后还有许多其他列:
这可能与 Miller(或其他类似工具)有关吗?命令会是什么样子?
动词是嵌套。从
开始
company,address,email
anna,123 fake,"anna@ciao.it,annac@gfail.com,a@box.net"
和运行
mlr --csv nest --explode --values --across-records --nested-fs "," -f email input.csv
你将拥有
+---------+----------+-----------------+
| company | address | email |
+---------+----------+-----------------+
| anna | 123 fake | anna@ciao.it |
| anna | 123 fake | annac@gfail.com |
| anna | 123 fake | a@box.net |
+---------+----------+-----------------+
如果您有一个“错误”的 CSV,您可能会遇到一些问题,您应该尝试清理它。一个通用的清理命令可能是这个:
mlr --csv -N clean-whitespace then remove-empty-columns then skip-trivial-records then cat -n sample.csv | mlr --csv nest --explode --values --across-records --nested-fs "," -f Email >output.csv
它会删除空行、空列和错误的空格。
我有一个包含很多列的非常大的 csv 文件(213,265 行)。
在其中一列中,我有一些用逗号分隔的电子邮件。 csv 文件的精简版本如下所示:
我想使用 Miller 将这些电子邮件分隔成它们自己的行,但也复制电子表格中的所有其他列(其中许多列未在此简单示例中显示) .
继续这个例子,我想以这样的方式结束。但请记住,真实的电子表格在电子邮件列之前和之后还有许多其他列:
这可能与 Miller(或其他类似工具)有关吗?命令会是什么样子?
动词是嵌套。从
开始company,address,email
anna,123 fake,"anna@ciao.it,annac@gfail.com,a@box.net"
和运行
mlr --csv nest --explode --values --across-records --nested-fs "," -f email input.csv
你将拥有
+---------+----------+-----------------+
| company | address | email |
+---------+----------+-----------------+
| anna | 123 fake | anna@ciao.it |
| anna | 123 fake | annac@gfail.com |
| anna | 123 fake | a@box.net |
+---------+----------+-----------------+
如果您有一个“错误”的 CSV,您可能会遇到一些问题,您应该尝试清理它。一个通用的清理命令可能是这个:
mlr --csv -N clean-whitespace then remove-empty-columns then skip-trivial-records then cat -n sample.csv | mlr --csv nest --explode --values --across-records --nested-fs "," -f Email >output.csv
它会删除空行、空列和错误的空格。