#csv #command-line-interface
#csv #интерфейс командной строки
Вопрос:
У меня снова и снова такие CSV-файлы (отформатированные в виде таблицы):
| PRODUCT | REGION | COMMENT | SALES1 | SALES2 | SALES3 |
| ------- | -------- | -------- | -------- | ------- | ------ |
| Orange | Valencia | good | Peter | | |
| Apple | Bavaria | mediocre | Maria | Walter | |
| Dates | Dubai | good | Angelica | William | Jessie |
В этом CSV я хочу перенести последние три столбца в один столбец, дублируя информацию из других столбцов, чтобы результат выглядел следующим образом:
| PRODUCT | REGION | COMMENT | SALES |
| ------- | -------- | -------- | -------- |
| Orange | Valencia | good | Peter |
| Apple | Bavaria | mediocre | Maria |
| Apple | Bavaria | mediocre | Walter |
| Dates | Dubai | good | Angelica |
| Dates | Dubai | good | William |
| Dates | Dubai | good | Jessie |
Конечно, я могу написать небольшой (Python) скрипт для этого, но мой вопрос:
Является ли это несколько стандартной операцией для таблиц / CSV / matrices и может ли какой-либо из существующих инструментов командной строки CSV (например csvkit
, miller
, csvtool
, и т.д.) Сделать это, возможно, из коробки?
Комментарии:
1. Ваш входной файл представляет собой CSV или markdown?
2. Входные данные — это CSV, но если вам это нужно как таблица уценки, как я ее отформатировал, вы можете, например, использовать
csvlook
из проекта csvkit .
Ответ №1:
В Miller (https://github.com/johnkerl/miller ) начиная с
PRODUCT,REGION,COMMENT,SALES1,SALES2,SALES3
Orange,Valencia,good,Peter,,
Apple,Bavaria,mediocre,Maria,Walter,
Dates,Dubai,good,Angelica,William,Jessie
и запуск
mlr --csv reshape -r "SALE" -o item,value then filter '$value=~". "' then cut -x -f item then rename value,SALES input.txt
у вас будет
--------- ---------- ---------- ----------
| PRODUCT | REGION | COMMENT | SALES |
--------- ---------- ---------- ----------
| Orange | Valencia | good | Peter |
| Apple | Bavaria | mediocre | Maria |
| Apple | Bavaria | mediocre | Walter |
| Dates | Dubai | good | Angelica |
| Dates | Dubai | good | William |
| Dates | Dubai | good | Jessie |
--------- ---------- ---------- ----------
Комментарии:
1. Хорошо, если это сработает, пожалуйста, отметьте этот ответ как правильный 🙂
2. Пришлось установить Miller, но он работает потрясающе. Еще раз спасибо. Я, конечно, сделаю больше с Miller!