Как распарсить вывод candump

12 декабря 2022 667 admin

Как распарсить вывод candump


Встала задача распарсить вывод candump'а.
Изначально, вывод candump'а выглядит следующим образом:

http//freeserver.su/uploads/images/NetBSD/candump-default.jpg

Нужно получить значения последних 8 столбцов отдельными переменными.
Будем в цикле парсить вывод команды 'candump vcan0' и разбирать по столбцам:

Пишем следующий скрипт в shell:
#!/bin/sh
candump vcan0 | while read col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11
do
echo '$col1='$col1
echo '$col2='$col2
echo '$col3='$col3
echo '$col4='$col4
echo '$col5='$col5
echo '$col6='$col6
echo '$col7='$col7
echo '$col8='$col8
echo '$col9='$col9
echo '$col10='$col10
echo '$col11='$col11
done

И у нас выведутся значения столбцов отдельными переменными:

http//freeserver.su/uploads/images/NetBSD/candump-parse-by-default.jpg

По умолчанию, разделителем могут быть:
- Пробел
- Знак табуляции
- Знак перевода строки

Отвечает за это товарищ IFS (Internal Field Separator); переменной окружения, которая позволяет указывать разделители полей.

Изменить значение IFS можно следующим образом:
IFS=$'\n' 
$ - обозначение, что это переменная;
\n- назначаемый разделитель, в данном случае - перевод каретки (он же Enter).

Перепишем наш скрипт, используя разделителем знак '`'(обратный апостроф или гравис, включается при помощи нажатия клавиши ё при включенной латинской раскладке клавиатуры), вместо пробела.
Потому что с таким разделителем candump может выдавать данные, если запустить с ключом 'candump -S':
http//freeserver.su/uploads/images/NetBSD/candump-S.jpg
#!/bin/sh
IFS=$'`'
candump -S vcan0 | while read col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11
do
echo '$col1='$col1
echo '$col2='$col2
echo '$col3='$col3
echo '$col4='$col4
echo '$col5='$col5
echo '$col6='$col6
echo '$col7='$col7
echo '$col8='$col8
echo '$col9='$col9
echo '$col10='$col10
echo '$col11='$col11
done

Вывод:
http//freeserver.su/uploads/images/NetBSD/candump-parse-with-gravis.jpg

Сравним результаты - они различаются!)

Произошло это из-за того, что в строке, который мы должны были парсить, были разные - СМЕШАННЫЕ - разделители!
Но так как во втором случае мы явно указали разделителем обратный апостроф, то и парсинг начался с обратного апострофа.
Причем, парсинг начинается с первой встречи знака разделителя.
Из-за чего, наши переменные "поехали": вместо нужных col4, col5, col6, col7, col8, col9, col10, col11 - мы получили разнобой переменных и значений.

Поэтому, будьте внимательны с разделителем!
  • 0

Другие новости по теме:

Другие новости по теме:

    Добавление комментария

    Имя:
    Пароль:
    Email:
    Код:
    captcha
    Введите код:

    Последнии комментарии
    движок для сайта бесплатные движки для сайтов
    Автор Yukiko (03.09.2025)
    Propichain's AI-powered approach positions it as a...
    движок для сайта бесплатные движки для сайтов
    Автор vovan casino онлайн (02.09.2025)
    I like what you guys are up too. Such clever work ...
    движок для сайта бесплатные движки для сайтов
    Автор vovan casino онлайн (02.09.2025)
    I like what you guys are up too. Such clever work ...
    движок для сайта бесплатные движки для сайтов
    Автор Suzanna (02.09.2025)
    Сервис подписки на экологичные средства гигиены.
    движок для сайта бесплатные движки для сайтов
    Автор Paula (01.09.2025)
    Производство модульных систем хранения для балконо...
    library initialization failed - unable to allocate file descriptor table - out of memory
    Автор Родион (30.08.2025)
    Большое спасибо за глубокий разбор, я сам
    не...
    Как присвоить несколько IP адресов, и диапазон IP адресов сетевому интерфейсу в Debian
    Автор Brian (30.08.2025)
    Качество звука отличное, диалоги чёткие.

    движок для сайта бесплатные движки для сайтов
    Автор Wilfredo (29.08.2025)
    Волга — культовый автомобиль советской эпохи с уни...
    library initialization failed - unable to allocate file descriptor table - out of memory
    Автор Мартин (28.08.2025)
    мой блог-пост; [INVALID URL BB CODE]
    }
    движок для сайта бесплатные движки для сайтов
    Автор Р7 регистрация без депозита (27.08.2025)
    Hello, the whole thing is going sound here and ofc...
     Популярные
       
    Календарь
    « Сентябрь »
    Пн Вт Ср Чт Пт Сб Вс
    1 2 3 4 5 6 7
    8 9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30
    Облако тегов
    Яндекс.Метрика