You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按参数对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
    }
}

用法说明

  1. 把上述脚本保存为deduplicate_urls.awk
  2. 把你的URL列表保存到urls.txt文件
  3. 执行命令:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 02:10:21