[问题描述]
统计完所有的访问请求后,要进行去重,但是存在这样的一个问题
如
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);
阅读(547) | 评论(0) | 转发(0) |