Если вы предпочитаете делать это в awk, вы можете сделать следующее. Split позволяет разделить строку любым разделителем полей.
awk '{split($7,a,"/"); split(a[3],b,"m="); split(b[2],c,"&"); split(c[2],d,"="); print a[2], c[1], d[1], d[2] }' logfile
Это генерирует желаемые столбцы.
userx contacts a form
usery customer doajax request
userx meeting doajax date
Остающийся шаг - отформатировать. Массивы в awk ассоциативны и могут индексироваться строками - см. здесь . Вы можете сделать следующее; здесь op (сокращение от output) инициализируется значением null. Затем мы устанавливаем op [d [1]] = d [2]
.
awk '{split($7,a,"/"); split(a[3],b,"m="); split(b[2],c,"&"); split(c[2],d,"="); op["a"]="null"; op["doajax"]="null"; op["ajaxaction"]="null"; op[d[1]]=d[2];print a[2], c[1], op["a"], op["doajax"], op["ajaxaction"] }' junk.txt
[изменено на]
awk '{split($7,a,"/"); split(a[3],b,"m="); split(b[2],c,"&"); split(c[2],d,"="); op["a"]="null"; op["doajax"]="null"; op["action"]="null"; op[d[1]]=d[2]; split(c[3],f,"="); split(f[2],g,"."); op[f[1]]=g[1]; print a[2], c[1], op["a"], op["doajax"], op["action"] }' junk.txt
Вывод выглядит следующим образом
userx contacts form null null
usery customer null request getContacts
userx meeting null date null