AWK 从 URL 中删除查询参数

AWK remove query params from URL

我有 access.log 行超过 100 万行的文件。行的例子:

113.10.154.38 - - [27/May/2016:03:36:26 +0200] "POST /index.php?option=com_jce&task=plugin&plugin=imgmanager&file=imgmanager&method=form&cid=20&6bc427c8a7981f4fe1f5ac65c1246b5f=cf6dd3cf1923c950586d0dd595c8e20b HTTP/1.1" 200 22 "-" "BOT/0.1 (BOT for JCE)" "-"

我需要解析日志行以计算 10 个最常见的 url,但我需要从 url 中删除查询参数。没有查询参数我写了这段代码

awk '{print }' test.log | sort | uniq -c | sort -rn | \
head | awk '{print NR,"\b. URL:", ,"\n   Requests:", }'

但我不知道如何删除查询参数并计算前 10 个最常见的 url 没有参数的请求以获得明确的顶部。

使用 sub() 函数从字符串中删除模式。

当您提取字段以对唯一值进行排序和计数时,您也需要执行此操作。

awk '{sub(/\?.*/, "", ); print }' test.log | sort | uniq -c | sort -rn | ...