什么是 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

它会删除空行、空列和错误的空格。