Что представляет собой команда Миллера для разделения писем на их собственные строки, а также копирования данных из других столбцов?
У меня очень большой файл csv (213265 строк) с множеством столбцов.
В одной из этих колонок у меня есть письма, разделенные запятыми. Урезанная версия файла csv выглядит так:
Я хотел бы использовать Миллера, чтобы разделить эти электронные письма на их собственные строки, но также скопировать ВСЕ другие столбцы в электронной таблице (многие из которых не показаны здесь в этом простом примере).
Продолжая этот пример, я хотел бы закончить примерно так. Но имейте в виду, что в реальной таблице есть много других столбцов до и после столбца электронной почты:
Можно ли это сделать с помощью Miller (или другого подобного инструмента)? Как бы выглядела команда?
1 ответ
Глагол гнездо. Начиная с
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
Он удаляет пустые строки, пустые столбцы и неправильные пробелы.