Как распарсить вывод 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
    Введите код:

    Последнии комментарии
    движок для сайта бесплатные движки для сайтов
    Автор Rodrigo (02.07.2025)
    Greate article. Keep writing such kind of informat...
    движок для сайта бесплатные движки для сайтов
    Автор gizbo казино (02.07.2025)
    Howdy! I know this is kinda off topic but I was wo...
    движок для сайта бесплатные движки для сайтов
    Автор Berniece (29.06.2025)
    Link exchange is nothing else except it is simply ...
    движок для сайта бесплатные движки для сайтов
    Автор Veda (26.06.2025)
    Hi would you mind sharing which blog platform you'...
    движок для сайта бесплатные движки для сайтов
    Автор Pansy (25.06.2025)
    Hi there friends, how is everything, and what you ...
    движок для сайта бесплатные движки для сайтов
    Автор Daniella (24.06.2025)
    I go to see everyday some websites and websites to...
    движок для сайта бесплатные движки для сайтов
    Автор Freda (21.06.2025)
    It's wonderful that you are getting thoughts from ...
    движок для сайта бесплатные движки для сайтов
    Автор Camille (21.06.2025)
    I'd like to thank you for the efforts you've put i...
    DEC-Digital Equipment Corporation
    Автор admin (15.05.2025)
    Tressa, I use hosting from NetHostCentrer - https:...
    DEC-Digital Equipment Corporation
    Автор Tressa (15.05.2025)
    Great blog here! Additionally your website so much...
     Популярные
       
    Календарь
    « Июль »
    Пн Вт Ср Чт Пт Сб Вс
    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 31
    Облако тегов
    Яндекс.Метрика