У меня есть файл, который позволяет сказать temp.log со следующим содержимым-
blahblah SomeOtherClassName blahblahblah
blahblah MyClassName blah blah blah userId:[6729223726254951za],key:[09809890980980908d0e6],token:[0238234234-3948-4d9],SessionScope:[0238234234-3948-4d9],PageScope:[0238234234-3948-4d9],RequestScope:[0238234234-3948-4d9], requestUrl:/blah/blah/blah
blahblah SomeOtherClassName blahblahblah
blahblah MyClassName blah blah blah userId:[6729223726254951za],key:[09809890980980908d0e6],token:[0238234234-3948-4d9],SessionScope:[1111111-3948-4d9],PageScope:[0238234234-3948-4d9],RequestScope:[0238234234-3948-4d9], requestUrl:/blah/blah/blah
Я хочу проанализировать файл журнала и выводить, если строка журнала, которая имеет MyClassName, и если одно из значений sessioncope, pagescope или requestscope не соответствует значению токена. Например, в моем примере строки 2 и 4 имеют MyClassName, а в двух строках 4 значение SessionScope отличается от токена, поэтому должна быть выведена строка 4. Я борюсь с параметрами grep и backreference.
гавкрешение:
awk -v FPAT='\\[[^][[:space:]]+\\]' 'NF>5 && ($3!=$4 || $3!=$5 || $3!=$6){ print $0 }' logfile
Выход:
blahblah MyClassName blah blah blah userId:[6729223726254951za],key:[09809890980980908d0e6],token:[0238234234-3948-4d9],SessionScope:[1111111-3948-4d9],PageScope:[0238234234-3948-4d9],RequestScope:[0238234234-3948-4d9], requestUrl:/blah/blah/blah
Детали:
-v FPAT='\\[[^][[:space:]]+\\]'
-значение поля определения шаблона (например.[0238234234-3948-4d9]
)
($3!=$4 || $3!=$5 || $3!=$6)
-если какой-либо из ключевых ключей не соответствует значению токена$3
Захватите токен в группу, а затем протестируйте его, используя обратные ссылки:
$ grep 'MyClassName' log |
grep -vE 'token:(\[[[:xdigit:]-]+\]),SessionScope:\1,PageScope:\1,RequestScope:\1'
blahblah MyClassName blah blah blah userId:[6729223726254951za],key:[09809890980980908d0e6],token:[0238234234-3948-4d9],SessionScope:[1111111-3948-4d9],PageScope:[0238234234-3948-4d9],RequestScope:[0238234234-3948-4d9], requestUrl:/blah/blah/blah