Shell 请求模式计数

Shell 请求模式计数,shell,unix,sed,Shell,Unix,Sed,我想在requests.log文件中查找请求模式的计数 102.232.32.322 "/v1/places?name=ass&lat=22.3&lng=12.12 HTTP 1.1" 23 111 102.232.32.322 "/v1/places/23232 HTTP 1.1" 23 111 102.232.32.322 "/v1/places?name=bcdd&lat=22.23&lng=12.12&quality_score=true H

我想在requests.log文件中查找请求模式的计数

102.232.32.322  "/v1/places?name=ass&lat=22.3&lng=12.12 HTTP 1.1" 23 111
102.232.32.322  "/v1/places/23232 HTTP 1.1" 23 111
102.232.32.322  "/v1/places?name=bcdd&lat=22.23&lng=12.12&quality_score=true HTTP1.1" 23 111
.....
到目前为止,我只能剪断字符串并去掉数字

cat requests.log | grep /v1/places | cut -c53- |cut -d '"' -f 1 | cut -d' ' -f1 | sed 's/[0-9]//g' 

100 /v1/places?name=<name>&lat=<lng>
110 /v1/places/<placeid>
10  /v1/places?name=<name>&lat=<lat>&lng=<&lng>&country_code=<country>
cat requests.log | grep/v1/places | cut-c53-| cut-d'-f1 | cut-d'-f1 | sed's/[0-9]//g'
100/v1/places?名称=&lat=
110/v1/位/
10/v1/地点?名称=&纬度=&液化天然气=&国家/地区代码=
在上述方式中,所有可能的模式都忽略了请求参数的顺序 输出应采用以下方式

另一个主要问题是使用awk无法保证参数顺序

awk '{sub(/^"/, "", $2); a[$2]++} END{for (i in a) print a[i], i}' OFS='\t' log.file
2   /v1/places/23232
1   /v1/places?name=ass&lat=22.3&lng=12.12
1   /v1/places?name=bcdd&lat=22.23&lng=12.12&quality_score=true

您可能希望将其移动到脚本文件中,因为它可能会变长,但您可以使用函数将参数收集为数组,然后对数组进行排序(这样您就不必关心顺序)然后将其存储在一个更大的数组中,您可以循环并计算重复的迭代次数。您所说的请求模式是什么意思?
我指的是100/v1/places?name=&lat=&lng=10/v1/places/以及您的预期输出是什么?正是在上面的注释计数中,然后是每行的请求模式谢谢,我将尝试一下