PARAM=b
grep -E "nir.*${PARAM}" txt
или
grep -E 'nir.*'"${PARAM}" txt
Вы должны иметь возможность использовать socat
в простой команде, например
socat pty,link=$HOME/myserial,rawer /dev/ttyUSB0,rawer 2>&1
Это создает символическую ссылку ~/myserial
на pty, и любой ввод/вывод к pty копируется в/из последовательного порта. Сделав еще один шаг, вы можете добавить опции -v
, чтобы скопировать ввод-вывод в stderr, и -x
, чтобы распечатать его в шестнадцатеричном виде со строками заголовков в форме:
< 2019/01/12 18:16:36.528942 length=12 from=310 to=321
, где первый символ — это направление <
или >
, а длина — это количество скопированных байтов. Использование шестнадцатеричного кода гарантирует, что строка заголовка не будет перепутана с необработанными данными. Вот возможный awk-скрипт для разбора этого. Примерно каждые 10 секунд он записывает текущее количество байтов в секунду в направлении.
socat -v -x pty,link=$HOME/myserial,rawer /dev/ttyUSB0,rawer 2>&1 |
awk '
/^[><]/{ split($3,x,":"); tod = (x[1]*60+x[2])*60+x[3];
split($4,x,"="); len = x[2]+0;
dir = $1=="<" ? "rx" : "tx";
if(tod-lasttod[dir]>=10){
printf "%s %f\n",dir,(len+tot[dir])/(tod-lasttod[dir])
lasttod[dir] = tod
tot[dir] = 0
}else tot[dir] += len
}'
Для простоты каждое направление обрабатывается отдельно, и вам нужно зафиксировать время до полуночи. Типичный вывод может быть
tx 2.398754
rx 0.000425
tx 2.398772
rx 61.768501