Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1105483
  • 博文数量: 276
  • 博客积分: 8317
  • 博客等级: 少将
  • 技术积分: 2329
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-12 08:17
个人简介

http://ads.buzzcity.net/adpage.php?partnerid=40096

文章分类

全部博文(276)

文章存档

2013年(1)

2012年(38)

2011年(102)

2010年(85)

2009年(45)

2008年(5)

分类: Python/Ruby

2011-04-18 16:28:38

[问题描述]
统计完所有的访问请求后,要进行去重,但是存在这样的一个问题

file:request.log
php?b=3&a=2





相同文件访问GET方法传的值的顺序可能不一样,但现在要把传值相同的请求也去重

[解决方案]

1. bash
把目标文件放在test.txt中
#!/bin/bash
while read line
do
   url=`echo "$line"|awk -F "?" '{print $1}'`
   echo $url `echo "$line"|awk -F "?" '{print $2}'|tr '&' '\n'|sort`>>test2.txt
donecat test2.txt|awk 'BEGIN{OFS="&"}{NF=NF;print $0}'|uniq|sed 's/\&/\?/

2. perl
perl -F"\?|&" -ane 'chomp @F;$a="@{[sort @F]}";if(!$a{$a}){$a{$a}=print}' file

3. bash
awk -v FS="?|&" '{for(i=1;i<=NF;i++) a[i]=$i;asort(a);x=$1; for(j=2;j<=NF;j++) x=x" "a[j];if(++b[x]==1) print;delete a}' file

4. php
$urls = array('php?b=3&a=2' , 'php?a=2&b=3' , '');
foreach ($urls as $url) {
    $tog = '';
    $togg = array();
    $parseurl = parse_url($url);
    parse_str($parseurl['query'], $output);
    ksort($output);
    foreach ($output as $key => $value) {
        $togg[] = "$key=$value";
    }
    $tog = implode('&', $togg);
    $parseurl['query'] = $tog;
    if(!$parseurl['query']){
        unset($parseurl['query']);
    }
    $urll = implode('?', $parseurl);
    $urlsarray[] = $urll;
}
$uniqurlsarray = array_unique($urlsarray);
print_r($uniqurlsarray);
阅读(522) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~