допустим у нас есть файлы 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}'
для перекидывания в
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 |