Отфильтруйте столбец в журналах, используя интерполированную строку с awk - PullRequest
1 голос
/ 12 февраля 2020

У меня есть журналы ADB с телефона Android, которые выглядят так:

02-11 18:16:54.737 24875 24875 I MultiDex: VM with version 2.1.0 has multidex support

Третий элемент - это pid.

Сначала я беру pids

list="/"`adb shell ps | grep -E 'audioserver|system' | awk '{print $2}' | tr '\n' '|' | rev | cut -c 2- | rev`"/"

Это дает мне что-то вроде /77|471|472|473|474|491|499|503|505|506|507|537|627/

Затем я пытаюсь отфильтровать журналы:

$ adb logcat | awk -v list="$list" '$3 ~ list'

Но у меня ничего не отображается. Если я сделаю:

$ adb logcat | awk '$3 ~ /77|471|472|473|474|491|499|503|505|506|507|537|627/'

У меня есть вывод.

  1. Почему у меня нет выхода?
  2. Можно ли переписать это более простым способом?

1 Ответ

1 голос
/ 12 февраля 2020

Не создавайте свое регулярное выражение с разделителями /. Просто создайте регулярное выражение с чередованием и убедитесь, что якоря используются, чтобы избежать совпадения, например 5085, когда у вас чередуется 508:

echo '02-11 18:16:54.737 24875 24875 I MultiDex: VM with version 2.1.0 has multidex' |
awk -v re='503|505|506|507|537|627|24875' ' $3 ~ "^(" re ")$" '

02-11 18:16:54.737 24875 24875 I MultiDex: VM with version 2.1.0 has multidex
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...