Ответы пользователя по тегу CSV
  • Как объединить скрипты и сделать вывод таблицей?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    вы конечно мастер путанных вопросов, но в принципе понятно чего вы добиваетесь, поэтому просто приведу маленький пример, а там уже переделаете под свои нужды
    допустим у нас есть несколько файлов с результатами в виде одной строки
    как пример
    echo "ОК" > {biosinfo,meminfo,cpuinfo}.result
    создадим три файла которые содержат значение "OK"

    там же создадим скрипт results_table.sh
    #!/usr/bin/env bash
    
    FILEPATH_BIOSINFO_RESULT="biosinfo.result"
    FILEPATH_MEMINFO_RESULT="meminfo.result"
    FILEPATH_CPUINFO_RESULT="cpuinfo.result"
    
    BIOSINFO_RESULT=$(cat "$FILEPATH_BIOSINFO_RESULT")
    MEMINFO_RESULT=$(cat "$FILEPATH_MEMINFO_RESULT")
    CPUINFO_RESULT=$(cat "$FILEPATH_CPUINFO_RESULT")
    
    TABLE="TEST;RESULTS
    BIOS ver;$BIOSINFO_RESULT
    Memory;$MEMINFO_RESULT
    CPU;$CPUINFO_RESULT"
    
    echo "$TABLE" | csview -d";"

    здесь мы прописываем в переменную TABLE нужную нам информацию в виде текстового CSV формата, а затем с помощью утилиты csview выводим в виде таблицы

    результат работы скрипта
    ┌──────────┬─────────┐
    │ TEST     │ RESULTS │
    ├──────────┼─────────┤
    │ BIOS ver │ ОК      │
    │ Memory   │ ОК      │
    │ CPU      │ ОК      │
    └──────────┴─────────┘
    Ответ написан
    Комментировать
  • Что использовать для сравнения двух CSV файлов?

    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     |
    Ответ написан
    1 комментарий
  • Как разделить csv файл на несколько файлов?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    пилим на четыре части:
    split -n 4 file.csv
    в итоге получим 4 файла: xaa xab xac xad

    после переноса склеиваем файлы в один:
    cat xaa xab xac xad > file.csv
    Ответ написан
    Комментировать
  • Как скопировать в новый файл только строки по маске?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    можно и с помощью awk:
    $ awk -v N=2 -F";" '$N ~ /^[0-9]{11}$/ {print $N}' FileIN >> FileOut

    где N=2 номер нужной колонки
    -F";" - в кавычках указываем разделитель колонок
    Ответ написан