Я пытаюсь разобрать журналы сообщений только для чтения с радио. Некоторые записи состоят из 2-3 строк, другие могут быть более 8 строк. Хорошая новость в том, что я могу найти уникальные статические строки начала и остановки. Плохая новость в том, что я пытался скопировать код SED из ближайшего примера, который я смог найти за последние 11 часов, но безуспешно.
Лог выглядит так:
M: 2019-06-08 18:15:24.927 DMR Slot 2, received network voice header from KS3X to TG 91
M: 2019-06-08 18:15:25.402 DMR Talker Alias (Data Format 1, Received 6/20 char): 'KS3X D'
M: 2019-06-08 18:15:25.410 DMR Slot 2, Embedded Talker Alias Header
M: 2019-06-08 18:15:25.412 0000: 04 00 68 4B 53 33 58 20 44 *..hKS3XD*
M: 2019-06-08 18:15:26.111 DMR Talker Alias (Data Format 1, Received 13/20 char): 'KS3X DMR ID: '
M: 2019-06-08 18:15:26.120 DMR Slot 2, Embedded Talker Alias Block 1
M: 2019-06-08 18:15:26.121 0000: 05 00 4D 52 20 49 44 3A 20 *..MR ID: *
M: 2019-06-08 18:15:26.824 DMR Talker Alias (Data Format 1, Received 20/20 char): 'KS3X DMR ID: 1142129'
M: 2019-06-08 18:15:26.824 DMR Slot 2, Embedded Talker Alias Block 2
M: 2019-06-08 18:15:26.824 0000: 06 00 31 31 34 32 31 32 39 *..1142129*
M: 2019-06-08 18:16:15.921 DMR Slot 2, received network end of voice transmission, 51.2 seconds, 0% packet loss, BER: 0.0%
Переменные данных, которые я хотел бы получить, будут следующими:
- Позывной между «от» и «до» в строке 1.
- Канал, расположенный между «до» и концом строки 1.
- ID DMR в конце строки 8 (1142129).
- Продолжительность 51,2 секунды в строке 11.
- Процент потери пакетов в строке 11.
- Процент BER в конце строки 11.
Все записи, независимо от длины строк, начинаются с «принятого голосового заголовка от» и заканчиваются символом процента «%». Кроме того, кто-нибудь может указать мне на низкоуровневый обзор того, когда использовать SED, GREP или AWK, все они мне кажутся очень похожими? Просто ссылка на хороший учебник была бы замечательной.
Я пытаюсь запустить bash-скрипт для мониторинга журнала с помощью терминала, используя что-то вроде этого:
tail -fn0 /var/log/pi-star/MMDVM-2019-06-08.log
Но только с 6 переменными, указанными выше. Супер благодарен !!!
#!/bin/bash
ACCESS_TOKEN="o.WOgpVaaEBjoVLGKS3VzFnsO4xGClTRiF"
tail -fn0 /var/log/pi-star/MMDVM-2019-06-08.log | \
while read line ; do
echo "$line" | gawk '
match($0, /received.*voice header from ([[:alnum:]]+) to ([[:alnum:]]+ [0-9]+)/, a) {
in_record = 1
call_sign = a[1]
channel = a[2]
}
in_record && match($0, /DMR ID: ([0-9]+)/, a) {
dmr_id = a[1]
}
in_record && match($0, /([0-9.]+) seconds, ([0-9]+)% packet loss, BER: ([0-9.]+)%/, a) {
in_record = 0
print call_sign, channel, dmr_id, a[1], a[2], a[3]
}
'
done