@vitaly_il1
DevOps Consulting

Что использовать для сравнения двух CSV файлов?

У меня есть два файла примерно такого формата (это KPIs после запуска разных моделей ML) :

kpi1,kpi2,kpi3,kpi4,...
1.23,5.67,2.22,3.45,4.44,...


Заголовки одинаковые, возможны вариации в значениях.
Мне нужно показать разницу текстом в "красивом виде" - желательно с выделением цветом. Или в формате Markdown.
Это должно быть CLI tool - мне надо это вставить в GitHub Actions flow.
Я смотрел на https://paulfitz.github.io/daff/ но может есть что-то более удобное.
  • Вопрос задан
  • 596 просмотров
Решения вопроса 1
xotkot
@xotkot
хорошо есть и хорошо весьма
допустим у нас есть файлы file1.csv и file2.csv
$ cat file1.csv
kpi1,kpi2,kpi3,kpi4,kpi5
1.23,5.67,2.21,3.45,4.44

$ cat file2.csv
kpi1,kpi2,kpi3,kpi4,kpi5
0.23,5.67,2.22,3.45,2.44

где согласно условию: "Заголовки одинаковые, возможны вариации в значениях."

cat file1.csv | head -1 | tr ',' '\n' > file3_1.csv
cat file1.csv | tail -1 | tr ',' '\n' | paste file3_1.csv - > file3_2.csv
cat file2.csv | tail -1 | tr ',' '\n' | paste file3_2.csv - > file3_3.csv

в итоге получим
$ cat file3_3.csv
kpi1	1.23	0.23
kpi2	5.67	5.67
kpi3	2.21	2.22
kpi4	3.45	3.45
kpi5	4.24	2.44

для удобства можно ввести 4-й столбец где укажем разницу между вторым и третим
cat file3_3.csv | awk '{print $0"\t"$2-$3}' > file3_4.csv

$ cat file3_4.csv
kpi1	1.23	0.23	1
kpi2	5.67	5.67	0
kpi3	2.21	2.22	-0.01
kpi4	3.45	3.45	0
kpi5	4.24	2.44	1.8

а заодно добавим заголовки
echo -e 'name\t$2\t$3\t$2-$3' | cat - file3_4.csv > file3_5.csv

$ cat file3_5.csv
name	$2	$3	$2-$3
kpi1	1.23	0.23	1
kpi2	5.67	5.67	0
kpi3	2.21	2.22	-0.01
kpi4	3.45	3.45	0
kpi5	4.44	2.44	2

пример того как в консоли выделить красным цветом строки где разница между вторым и третим столбцом больше нуля:
cat file3_5.csv | awk '$4>0{print "\033[41m"$0"\033[0m"}$4<=0{print}'


для красивого оформления в консоли можно использовать утилиту csview
$ csview -t file3_5.csv
┌──────┬──────┬──────┬───────┐
│ name │ $2   │ $3   │ $2-$3 │
├──────┼──────┼──────┼───────┤
│ kpi1 │ 1.23 │ 0.23 │ 1     │
│ kpi2 │ 5.67 │ 5.67 │ 0     │
│ kpi3 │ 2.21 │ 2.22 │ -0.01 │
│ kpi4 │ 3.45 │ 3.45 │ 0     │
│ kpi5 │ 4.44 │ 2.44 │ 2     │
└──────┴──────┴──────┴───────┘

пример покраски значения в таблице:
csview -t file3_5.csv | awk '$8>0{print "\033[41m"$0"\033[0m"}$8<=0{print}'

636a486564c22703960926.png

для перекидывания в markdown используем ключ -s, --style
$ csview -t -s Markdown file3_5.csv
| name | $2   | $3   | $2-$3 |
|------|------|------|-------|
| kpi1 | 1.23 | 0.23 | 1     |
| kpi2 | 5.67 | 5.67 | 0     |
| kpi3 | 2.21 | 2.22 | -0.01 |
| kpi4 | 3.45 | 3.45 | 0     |
| kpi5 | 4.44 | 2.44 | 2     |
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@vitaly_il1 Автор вопроса
DevOps Consulting
Во-первых, большое спасибо xotkot - как старый юниксомд получил удовольствие разбирая его решение.
В попытке найти что-то готовое я попробовал https://paulfitz.github.io/daff/ - оказалось, он дает удобный отчет в CSV или HTML формате.
(636a6e44b294b208478249.pngПравда, для использования в Github Actions мне нужен отчет в markdown и я пока не нашел конвертор, который справляется со сложными отчетами. Но для простых работает, хотя почему-то без цветовой подстветки - см. скриншот. Но это уже другая история)
Ответ написан
Комментировать
Еще одно весьма оригинальное решение: https://github.com/dolthub/dolt
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы