AWK中的URL解码

AWK中的URL解码,awk,urldecode,Awk,Urldecode,我文件中的一列是url编码的,我必须对该列进行解码,并需要根据列中的值执行一些操作。有什么方法可以在awk中解码该列吗?您必须根据您的文件格式进行调整,但基本原则如下(使用GNU awk 3.1.7进行测试): 我的字符串如下:“http%3a%2f%2fwww.gazelle.com%2fiphone%2fiphone-3g”上述操作无法解码此字符串..:(显然,我使用的格式“%02X”与用大写百分比符号编码的URL相匹配,如http%3A%2F…我修改了示例代码以转换小写百分比编码。现在它应

我文件中的一列是url编码的,我必须对该列进行解码,并需要根据列中的值执行一些操作。有什么方法可以在awk中解码该列吗?

您必须根据您的文件格式进行调整,但基本原则如下(使用GNU awk 3.1.7进行测试):


我的字符串如下:“http%3a%2f%2fwww.gazelle.com%2fiphone%2fiphone-3g”上述操作无法解码此字符串..:(显然,我使用的格式“%02X”与用大写百分比符号编码的URL相匹配,如
http%3A%2F…
我修改了示例代码以转换小写百分比编码。现在它应该同时使用这两种格式…至少在
%40
(for循环的上限)。您可能需要调整它…我的字符串如下:1370474740&http%3a%2f%2fwww.xxxx.com%2fiphone%2fiphone-3g&et%3da%26ago%3d212%26ao%3d219%26px%3d73%26av1%3d2%26av2%3dorgorganesearch&13456当我这样使用awk时:awk'BEGIN{{FS=“&”{for(i=0x20;i<0x40;++i)gsub(sprintf(“%%%02x”,i),sprintf(“,”);i));print$1,$3}“%26”即“&”没有被转换,为什么?这一个很难!我不记得
&
\
gsub
的替换字符串中有特殊的含义。答案中已修复(我希望)虽然这个函数可以工作,但速度很慢,我在这里发现了一个快得多的问题。这个问题不是前面提到的问题的副本,它的标题是错误的。这不是副本。这个问题的答案为我解决了另一个问题没有解决的问题。
sh$ echo 'Hello%2C%20world%20%21' | awk '
     {
         for (i = 0x20; i < 0x40; ++i) {
             repl = sprintf("%c", i);
             if ((repl == "&") || (repl == "\\"))
                 repl = "\\" repl;
             gsub(sprintf("%%%02X", i), repl);
             gsub(sprintf("%%%02x", i), repl);
         }
         print
     }
 '
Hello, world !
function urlDecode(url) {
    for (i = 0x20; i < 0x40; ++i) {
        repl = sprintf("%c", i);
        if ((repl == "&") || (repl == "\\")) {
            repl = "\\" repl;
        }
        url = gensub(sprintf("%%%02X", i), repl, "g", url);
        url = gensub(sprintf("%%%02x", i), repl, "g", url);
    }
    return url;
}