] У меня была похожая проблема. Проверьте, правильно ли имя хоста разрешено по IP-адресу. Если нет, попробуйте добавить ваше имя хоста в /etc/hosts, например:[
] [] []]127.0.0.2 myhostname.mydomain[
] [
Ну, скорее с толку, но в любом случае ... Судя по выходу
COSITOO_SUB -D -T + / # 2>> (GREP Publish)
Ваше приложение, кажется, выводится как STDERR
и STDOUT
(в противном случае вы должны получить только соответствие линий публикуют
на вашем выходе). Он печатает отладочные сообщения (, отправляющих ...
и , полученные ...
) к STDERR
и фактические данные ( 810 54409956143. ..
) - stdout
.
, по-видимому, вам нужны значения, разделенные запятыми, чтобы вы могли попробовать следующее, если вам нужен временные метки от линейного сопоставления , публикуют
:
mosquitto_sub -d -t +/# 2>&1 | xargs -d$'\n' -L1 sh -c 'date "+%s,$0"' | \
sed -n "/PUBLISH/{N;s|[ /]|,|g;s|^\([^,]*,\)[^']*'\([^']*\)',.*\n[^,]*,\(.*\)|\1\2,\3|;p}"
или, если вам нужен временную метку от следующей строки:
mosquitto_sub -d -t +/# 2>&1 | xargs -d$'\n' -L1 sh -c 'date "+%s,$0"' | \
sed -n "/PUBLISH/{N;s|[ /]|,|g;s|^[^,]*,[^']*'\([^']*\)',.*\n\([^,]*,\)\(.*\)|\2\1,\3|;p}"
2> & 1
перенаправляются STDERR
на STDOUT
, вывод затем питается в xargs
, который проходит каждую строку в качестве аргумента к следующей команде SH -C «Дата» +% S, $ 0 "'
Итак, каждая линейка предложена с помощью временной техники + запятая, например:
[timestamp],Sending PINGREQ
[timestamp],Received PINGRESP
[timestamp],Received PUBLISH (d0, q0, r0, m0, 'm/NWRL/TMX/098/d/status', ... (39 bytes))
[timestamp],871,40114,4536 4536 323
Это затем трубопровод к SED
, подавляя автоматическую печать ( -N
).
Для каждого сопоставления строки публикуют
, добавьте N
Ext Line, заменить каждое пространство и /
с запятой тогда через группу, сохранить только первый или второй меток времени, Значения между цитатами и значениями после второго временного времени и, наконец, напечатают результат:
[timestamp],m,NWRL,TMX,098,d,status,871,40114,4536,4536,323
Я имитировал комара в среде bash/ksh и нашел
stub_mosquitto |
sed -e 's/.*m0, //' -e 's/, .*bytes))//' | while read line; do
if [[ "${line}" = \'* ]]; then
echo -n "${line}, "
else
echo "${line}, $(date)"
fi
done
здесь я использовал sed для резки интересных деталей.
Я использую во время чтения строки для простого способа соединения 2 строк (и добавления даты). Это возможно с sed или tr, но для этого может понадобиться некоторая работа (разные версии sed).
Я не совсем понимаю вызов mosquitto_sub, поэтому я показываю решение только тогда, когда строки проходят через трубу:
#
?2>&1
grep пропустит их.