Как игнорировать начало и части строки после фильтрации с помощью grep - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь отфильтровать вывод трассировки, расположенный в /sys/kernel/debug/tracing/trace, содержимое строки которого выглядит следующим образом:

 kworker/4:2-1892  [004] ....  2186.662751: rtos_queue_send_from_isr_failed: tstamp:68702870649 queue:0x0b4b0e58
 kworker/4:2-1892  [004] ....  2186.662752: rtos_queue_send_from_isr_failed: tstamp:68702870787 queue:0x0b4b1c18
 kworker/4:2-1892  [004] ....  2186.662752: rtos_queue_send_failed: tstamp:68702872258 queue:0x0b4a7258
 kworker/4:2-1892  [004] ....  2186.662754: rtcpu_vinotify_event: tstamp:68702873824 tag:CSIMUX_STREAM channel:0xff frame:1 vi_tstamp:68702873242 data:0x00000001
 kworker/4:2-1892  [004] ....  2186.662755: rtcpu_vinotify_event: tstamp:68703270221 tag:CHANSEL_PXL_SOF channel:0x00 frame:45313 vi_tstamp:68703269252 data:0x00000001
 kworker/4:2-1892  [004] ....  2186.662755: rtcpu_vinotify_event: tstamp:68703270387 tag:ATOMP_FS channel:0x00 frame:45313 vi_tstamp:68703269257 data:0x00000000
 kworker/4:2-1892  [004] ....  2186.662756: rtcpu_vinotify_event: tstamp:68703270504 tag:CHANSEL_FAULT channel:0x00 frame:45313 vi_tstamp:68703269302 data:0x00000200
 kworker/4:2-1892  [004] ....  2186.662756: rtcpu_vinotify_event: tstamp:68703270903 tag:CSIMUX_STREAM channel:0xff frame:2 vi_tstamp:68703269326 data:0x00000001code:0404

Чтобы отфильтровать его, я хочу получить только события, поступающие с rtcpu_vinotify_event и этот тег не является CSIMUX_STREAM или CHANSEL_PXL_SOF.

. На данный момент я получил следующий вывод

 kworker/4:2-1892  [004] ....  2186.662755: rtcpu_vinotify_event: tstamp:68703270387 tag:ATOMP_FS channel:0x00 frame:45313 vi_tstamp:68703269257 data:0x00000000
 kworker/4:2-1892  [004] ....  2186.662756: rtcpu_vinotify_event: tstamp:68703270504 tag:CHANSEL_FAULT channel:0x00 frame:45313 vi_tstamp:68703269302 data:0x00000200

с помощью следующей команды

cat /sys/kernel/debug/tracing/trace | grep -v -e "rtos_queue_send_failed" -e "rtos_queue_send_from_isr_failed" -e "CSIMUX_STREAM" -e "CHANSEL_PXL_SOF"

В любом случае, в выводе есть какая-то нерелевантная информация, которую я хотел бы опустить в выводе (начало строки до rtcpu_vinotify_event и tstamp / vi_tstamp), так что я бы получил что-то вроде это:

 rtcpu_vinotify_event: tag:ATOMP_FS channel:0x00 frame:45313 data:0x00000000
 rtcpu_vinotify_event: tag:CHANSEL_FAULT channel:0x00 frame:45313 data:0x00000200

или, если tstamps сложно избежать,

 rtcpu_vinotify_event: tstamp:68703270387 tag:ATOMP_FS channel:0x00 frame:45313 vi_tstamp:68703269257 data:0x00000000
 rtcpu_vinotify_event: tstamp:68703270504 tag:CHANSEL_FAULT channel:0x00 frame:45313 vi_tstamp:68703269302 data:0x00000200

Наконец, я включил rtcpu_vinotify_event сообщений, исключив rtos_queue_send_from_isr_failed и rtos_queue_send_failed Сообщения. Если есть способ сделать это так, чтобы это было не исключение, а включение строки rtcpu_vinotify_event, это было бы намного лучше, или если вам легче с find, у меня нет никаких предпочтений.

Ответы [ 2 ]

1 голос
/ 31 января 2020

Добавьте

| cut -f3- -d:

к вашей команде

Для проблемы включения-исключения, почему бы вам просто

| grep rtcpu_vinotify_event

вместо исключающего grep - v и его шаблоны?
Результат будет

grep rtcpu_vinotify_event /sys/kernel/debug/tracing/trace | grep -v "CSIMUX_STREAM\|CHANSEL_PXL_SOF" | cut -f3- -d:

РЕДАКТИРОВАНИЕ: (удалить также TS)

grep rtcpu_vinotify_event /sys/kernel/debug/tracing/trace | grep -v "CSIMUX_STREAM\|CHANSEL_PXL_SOF" | cut -f3,6- -d:
0 голосов
/ 31 января 2020

Вы можете сделать два grep, один для rtcpu_vinotify_event, а затем удалить совпадения для CSIMUX_STREAM и CHANSEL_PXL_SOF. Результат передается по каналу sed для фильтрации начала строки и tstamp / vi_tstamp.

grep 'rtcpu_vinotify_event' /sys/kernel/debug/tracing/trace | 
  grep -v 'CSIMUX_STREAM\|CHANSEL_PXL_SOF' | 
  sed 's/.*\(rtcpu_vinotify_event: \)tstamp:[0-9]* \(.*\)vi_tstamp:[0-9]* \(.*\)/\1\2\3/'
...