Я пытаюсь отфильтровать свой файл журнала по запросу. Я хочу отфильтровать все запросы (которые вы можете найти в 7-м столбце: / userx / index ...), которые имеют (m = xxx и a = xxx)
или (m = xxx и doajax = xxx)
и есть только запрос с этими параметрами
Например:
192.xx.x.x - - [11/Apr/2017:09:59:xx +0200] "POST /userx/index.php?m=xxxx&doajax=xxxx&action=xxxxx&id=x
192.xx.x.x - - [11/Apr/2017:09:59:xx +0200] "POST /userx/index.php?detailed=1&id=amgervais
192.xx.x.x - - [11/Apr/2017:09:59:xx +0200] "POST /userx/index.php?m=xxx&a=xxxx&dialog=x&actionId=x&prospectId=xx
результат фильтра:
192.xx.x.x - - [11/Apr/2017:09:59:xx +0200] "POST /userx/index.php?m=xxxx&doajax=xxxx&action=xxxxx
192.xx.x.x - - [11/Apr/2017:09:59:xx +0200] "POST /userx/index.php?m=xxx&a=xxxx
Я попытался использовать эту команду, чтобы просмотреть запрос с m = xxx и = xxx, но я не знаю, как это сделать в другом случае (когда я могу найти m = xxx и doajax = xxx) одновременно.
awk '$7 ~ /m=/' logfile | awk '$7 ~ /&a=/'
что не так с
awk '( $7 ~ /m=xxx/ ) && (( $7 ~ /a=xxx ) || ( $7 ~ /doajax=xxx/ )) {
split($7,A,"&") ; $7 = A[1] "&" A[2] ;print ;} ' logfile
, где
&&
обозначают логическое и, ||
логическое или, разделенное ($ 7, A, "&")
разделит 7-е поле на массив, используя & в качестве разделителя, $ 7 = A [1] "&" A [2]
изменение (не в файле) 7- ое поле в выбранное подполе печать
печать. (это может быть одна строка, я разрываю строку для удобства чтения).
это дает
192.xx.x.x - - [11/Apr/2017:09:59:xx +0200] "POST /userx/index.php?m=xxxx&doajax=xxxx
192.xx.x.x - - [11/Apr/2017:09:59:xx +0200] "POST /userx/index.php?m=xxx&a=xxxx
Если вам нужна полная строка с doajax
:
awk '/doajax/ { print ; next ; }
( $7 ~ /m=xxx/ ) && ( $7 ~ /a=xxx/ ) { split($7,A,"&") ; $7 = A[1] "&" A[2] ;print ;}'