Как распарсить вывод 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
    Автор Vicente (19.10.2025)
    Лев казино бонусы — это шанс увеличить свой депози...
    КриптоПРО для NetBSD
    Автор Robbie (18.10.2025)
    Казино онлайн Лев — это место, где каждый найдет и...
    Как присвоить несколько IP адресов, и диапазон IP адресов сетевому интерфейсу в Debian
    Автор Dario (18.10.2025)
    Новые бонусы казино Лев — не пропустите свои
    Как присвоить несколько IP адресов, и диапазон IP адресов сетевому интерфейсу в Debian
    Автор Margherita (18.10.2025)
    Оснащение конференц-зала светодиодными экранами по...
    движок для сайта бесплатные движки для сайтов
    Автор Emerson (16.10.2025)
    My partner and I absolutely love your blog and fin...
    Как присвоить несколько IP адресов, и диапазон IP адресов сетевому интерфейсу в Debian
    Автор Charline (13.10.2025)
    Мелбет зеркало 2024: надежный доступ к ставкам.
    Как присвоить несколько IP адресов, и диапазон IP адресов сетевому интерфейсу в Debian
    Автор Valencia (13.10.2025)
    Мелбет для новичков: как начать делать ставки.
    Как присвоить несколько IP адресов, и диапазон IP адресов сетевому интерфейсу в Debian
    Автор Michel (13.10.2025)
    Скачать приложение Melbet: легальный софт для став...
    Как присвоить несколько IP адресов, и диапазон IP адресов сетевому интерфейсу в Debian
    Автор Brandon (13.10.2025)
    Скачать приложение Melbet: легальный софт для став...
     Популярные
       
    Календарь
    « Октябрь »
    Пн Вт Ср Чт Пт Сб Вс
    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
    Облако тегов
    Яндекс.Метрика