免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: wangliang222002
打印 上一主题 下一主题

一个超复杂的shell,想破脑袋了 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2010-04-16 17:00 |只看该作者
  1. perl -F"\s+" -ane 'chomp; $a{$F[2]}+=1; END{map{print qq~$_ $a{$_}\n~} keys %a }'  urfile | sort +1 -r|head -5
复制代码

论坛徽章:
0
22 [报告]
发表于 2010-04-17 17:26 |只看该作者
本帖最后由 lucash 于 2010-04-17 17:35 编辑

  1. awk '{b[$3"\t"$2]++;}END{for(i in b) print i,b[i] | "sort -k1,1 -k3,3nr"}' file | awk '{a[$1]+=$3;if(!x[$1]){x[$1]="\t"$2","$3}else{if(count[$1]++>3){next}else{x[$1]=x[$1]":"$2","$3}}}END{for(i in x) print i"\t"a[i],x[i]}'
复制代码

论坛徽章:
0
23 [报告]
发表于 2010-04-17 22:05 |只看该作者
本帖最后由 李寻欢92 于 2010-04-18 09:18 编辑

既然是网站,为什么不用数据库
以mysql为例
1.建表
use test;/* 把表bbs存在数据库test里面 */
create table bbs (
                                pid int,
                                uid int,
                                ip varchar(15)
                                );

2.加载数据
load data local infile 'datafile' into table bbs;
如果datafile字段不是以制表符间隔,用以下命令
load data local infile 'datafile' into table bbs
fields terminated by ' '
lines terminated by '\n'
3.查询query.sql
use test;
select b.ip,b.num,a.uid,a.num from
(select ip,uid,count(*) num from bbs  group by uid order by count(uid) desc limit 5) a,
(select ip,count(*) num  from bbs group by ip ) b
where a.ip=b.ip order by b.ip,a.num desc;
4.输出结果mysql<query.sql>result
ip        num        uid        num
202.207.177.1        3        1000        2
202.207.177.1        3        1006        1
202.207.177.2        2        1001        1
202.207.177.2        2        1002        1
各字段含义为,ip地址,同一ip总文章,用户id,此id发表文章数。
5.善后
sed '1d' result>result1

论坛徽章:
0
24 [报告]
发表于 2010-04-18 14:23 |只看该作者
想了半天的时间终于写出来了~我很高兴HOHO~这个对我来说确实有些难度,不过我感觉我又进步了。keep moving...........


root@Dan scripts]# more awksrc95

{
   array[$3]++
   array[$2" "$3]++
}
END{
   for (i in array){
      len=split(i,tmp)
      if (len==1){
       print i" "array[i] | "sort -r"
    }else{
       print tmp[2]" "tmp[1]" "array[i] | "sort -rk3"
    }
}
}
[root@Dan scripts]# more awksrc96

{
   if(NF==2){
   array[$1]=array[$1]" "$2
}else{
   array[$1]=array[$1]" "$2" "$3
}

}
END{
  
  for (i in array){
    print i" "array[i] | "sort -rk2"
}
}
[root@Dan scripts]# awk -f awksrc95 linux.120 | awk -f awksrc96
202.207.177.2  4 1001 3 1002 1
202.207.177.1  3 1000 2 1006 1

论坛徽章:
0
25 [报告]
发表于 2010-04-18 15:04 |只看该作者
这个其实是数据库的行列互换问题。

论坛徽章:
0
26 [报告]
发表于 2010-04-19 10:25 |只看该作者
回复 10# blackold


    顶你,黑哥。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP