Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1481339
  • 博文数量: 263
  • 博客积分: 10851
  • 博客等级: 上将
  • 技术积分: 2627
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-26 22:40
文章分类

全部博文(263)

文章存档

2013年(4)

2012年(25)

2011年(33)

2010年(50)

2009年(138)

2008年(13)

分类: LINUX

2009-05-25 11:37:04

cat tt.txt
00_01_100
00_02_102
01_01_02_123
00_01_111
01_01_02_85
00_02_3
... ....
 
这段文本, 以下划线为分割域, 最后一列为下载次数, 前面的各列组合在一起确定一个游戏,  想求出每个游戏下载次数之和, 如何办?
我能想到的办法:
awk 'BEGIN{ FS="_" } { idx="";  for(i=1; i先拼凑好数组下标, 然后再根据数组下标求和。 但是感觉如果这个文本的记录数很多的话, 速度就会很慢, 求其他的办法:
 
awk -F_ '{s=$0;gsub("_[0-9]+$","",s);a[s]+=$NF}END{for(i in a) print i, a[i]}' URFILE
awk -F"_" '{for(i=1;ised 's/_\([0-9]*\)$/\t\1/' 数据文件 | awk '{a[$1]+=$2}END{for(i in a)print i "\t" a[i]}'
perl -ne '/(.*)_(.*)/; $n{$1} += $2; END{foreach (keys %n) {print "$_ => $n{$_}\n"}}' urfile
sed 's/^\(.*\)_\([0-9]*\)$/\1\t\2/g' tt.txt|sort -k1n|awk '{a[$1]+=$2}END{for(i in a) print i,a[i]}'
 
都很妙, 除了awk的, 其他的我都看不懂, 留在这里学习一下
阅读(1584) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~