Как распарсить вывод 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 - мы получили разнобой переменных и значений.

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

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

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

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

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

    Последнии комментарии
    Как присвоить несколько IP адресов, и диапазон IP адресов сетевому интерфейсу в Debian
    Автор Bernadine (28.11.2025)
    Каталоги вроде [INVALID URL BB CODE] предоставляют...
    движок для сайта бесплатные движки для сайтов
    Автор Lola (26.11.2025)
    Oh my goodness! Impressive article dude!
    Thank you,...
    движок для сайта бесплатные движки для сайтов
    Автор Sherman (22.11.2025)
    Просматривайте откровенные видео на безопасных
    Как присвоить несколько IP адресов, и диапазон IP адресов сетевому интерфейсу в Debian
    Автор Jacinto (16.11.2025)
    Поддержка решила вопрос с
    двойным бонусом, вернули...
    КриптоПРО для NetBSD
    Автор Trey (16.11.2025)
    Случайно поставил на x50 в Авиаторе — 25к
    в ...
    КриптоПРО для NetBSD
    Автор Alice (16.11.2025)
    Бонус на день рождения 10к без депозита,
    прия...
    движок для сайта бесплатные движки для сайтов
    Автор Riley (16.11.2025)
    Фриспины без вейджера — редкость,
    но у Мелбе...
    КриптоПРО для NetBSD
    Автор Luisa (16.11.2025)
    Играю с айфона, приложение не жрёт батарею
    КриптоПРО для NetBSD
    Автор Joanne (16.11.2025)
    Слоты от Прага, НетЕнта, Плейсона — всё топовые
    КриптоПРО для NetBSD
    Автор Brianna (16.11.2025)
    Мин деп для бонуса 500р, но можно и
    без бону...
     Популярные
       
    Календарь
    « Ноябрь »
    Пн Вт Ср Чт Пт Сб Вс
    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
    Облако тегов
    Яндекс.Метрика