如何按参数对URL去重排序?求AWK实现方案
基于参数排序的URL去重方案(AWK实现)
针对「参数顺序不同的URL视为重复,需要去重并保留参数有序的唯一URL」的需求,用AWK可以轻松实现,以下是具体方案:
核心AWK脚本
BEGIN { FS="?" # 用?拆分URL的路径和参数部分 } { if (NF == 1) { # 没有查询参数的URL,直接用原字符串当去重标识 key = $0 output = $0 } else { # 拆分路径和参数字符串 path = $1 param_str = $2 # 把参数字符串按&拆成数组 split_count = split(param_str, params_arr, "&") # 对参数数组做字典序排序 asort(params_arr) # 重新拼接成有序的参数字符串 sorted_params = params_arr[1] for (i = 2; i <= split_count; i++) { sorted_params = sorted_params "&" params_arr[i] } # 用「路径+有序参数」作为去重的唯一标识 key = path "?" sorted_params output = key } # 仅当该标识第一次出现时,输出对应的URL if (!seen[key]++) { print output } }
用法说明
- 把上述脚本保存为
deduplicate_urls.awk - 把你的URL列表保存到
urls.txt文件 - 执行命令:
awk -f deduplicate_urls.awk urls.txt
或者直接用单行命令执行(无需保存脚本文件):
awk 'BEGIN{FS="?"} {if(NF==1){key=$0;output=$0}else{path=$1;param_str=$2;split_count=split(param_str,params_arr,"&");asort(params_arr);sorted_params=params_arr[1];for(i=2;i<=split_count;i++){sorted_params=sorted_params"&"params_arr[i]};key=path"?"sorted_params;output=key};if(!seen[key]++){print output}}' urls.txt
效果验证
用你提供的输入URL列表执行后,会输出:
https://example.com/a?one=1&two=2 https://example.com/b?one=1&two=2 https://example.com/b?one=1 https://example.net/a/x?two=2&one=1
完全符合期望结果。
内容的提问来源于stack exchange,提问作者KarlsD
相关产品推荐
相关产品推荐

