请教一个AWK问题

2013-08-21 17:39:47 +08:00
 kenneth
13788 541719 1 1377072940
13788 716992 1 1377072940
13788 768192 0 1377072941
13788 770412 0 1377072941
13788 811103 1 1377072941
13788 854136 0 1377072941
13788 889680 1 1377072162
13788 892453 1 1377072941
13788 892957 1 1377072941
13788 901434 0 1377072941
13788 902755 0 1377072941
13788 904370 1 1377072941
13788 905028 0 1377072941
13788 905201 0 1377072940
13788 905351 0 1377072941
13788 905416 0 1377072940
13788 905429 0 1377072942
13788 905459 0 1377072941
13788 905474 0 1377072940
13788 905503 0 1377072941
13788 905544 0 1377072942
1489 1918483 0 1377075082
1489 2095557 1 1377073045
1489 2095557 1 1377073057
1489 2172887 0 1377075082
1489 2217633 0 1377075081
1489 2255116 0 1377074844
1489 2260423 1 1377073046
1489 2260423 1 1377073057
1489 2263863 1 1377073046
1489 2263863 1 1377073057
1489 2283598 0 1377074844
1489 2290529 0 1377074844
1489 2290750 0 1377073046
1489 2290750 0 1377073058
1489 2294205 0 1377073046
1489 2294205 0 1377073058
1489 2301212 0 1377073045
1489 2301212 0 1377073057
1489 2303265 0 1377075081
1489 2305124 0 1377073047
1489 2305124 0 1377073058
1489 2305720 0 1377073046
1489 2305720 0 1377073058
1489 2305995 0 1377073047
1489 2305995 0 1377073058
1489 2306102 0 1377073047
1489 2306102 0 1377073058
1489 2307904 0 1377073045
1489 2307904 0 1377073057
1489 2308700 0 1377073046
1489 2308700 0 1377073058
1489 2308872 0 1377073045
1489 2308872 0 1377073057
1489 2309166 0 1377073046
1489 2309166 0 1377073058
1489 2309193 0 1377073046
1489 2309193 0 1377073058
1489 2309489 0 1377073046
1489 2309489 0 1377073058
1489 2309723 0 1377073046
1489 2309723 0 1377073058
1489 2313234 0 1377073046
1489 2313234 0 1377073057
1489 2314163 0 1377074844
1489 2315500 0 1377074844
1489 2317656 0 1377074845
1489 2318521 0 1377073046
1489 2318521 0 1377073058
1489 2320097 0 1377073046
1489 2320097 0 1377073057
1489 2320685 0 1377074844
1489 2322841 0 1377075082
1489 2323347 0 1377074845
1489 2323768 0 1377075081
1489 2324137 0 1377074844
1489 2324230 0 1377075081
1489 2324310 0 1377074845
1489 2324370 0 1377075082
1489 2324471 0 1377074845
1489 2324515 0 1377074845
1489 2324536 0 1377074844
1489 2324586 0 1377075081
1489 2324596 0 1377075081
1489 2324611 0 1377075081
1489 2324652 0 1377075082
1489 2324653 0 1377074844
1489 2324661 0 1377075081
1489 2324690 0 1377074844
1489 2324748 0 1377074844
1489 2324755 0 1377075082
1489 2324757 0 1377075081
1489 2324759 0 1377075082
1489 2324760 0 1377075082
1489 2324765 0 1377074844
1489 2324767 0 1377075082
1489 2324768 0 1377075081
1489 2324769 0 1377074845
1489 2324770 0 1377075081
1489 2324771 0 1377074845
1489 2324773 0 1377074844
7951 2196930 0 1377074642
7951 5793877 0 1377074534
7951 5794616 0 1377074534
7951 5800971 0 1377074534
7951 5898238 0 1377074534
7951 5982421 1 1377074642
7951 5991760 0 1377074642
7951 6046984 1 1377074534
7951 6063271 1 1377074534
7951 6082433 1 1377074642
7951 6085337 1 1377074643
7951 6087099 0 1377074643
7951 6089031 0 1377074534
7951 6095194 0 1377074534
7951 6100033 0 1377074643
7951 6100688 0 1377074642
7951 6101361 0 1377074534
7951 6105881 0 1377074643
7951 6107761 0 1377074642
7951 6109301 0 1377074534
7951 6111929 0 1377074643
7951 6113670 0 1377074534
7951 6114846 0 1377074643
7951 6114891 0 1377074642
7951 6117178 0 1377074534
7951 6117292 0 1377074534
7951 6118241 0 1377074643
7951 6118350 0 1377074534
7951 6118442 0 1377074642
7951 6118491 0 1377074534
7951 6118678 0 1377074534
7951 6118839 0 1377074534
7951 6118888 0 1377074534
7951 6118895 0 1377074643
7951 6118951 0 1377074534
7951 6119059 0 1377074643
7951 6119075 0 1377074642
7951 6119076 0 1377074642
7951 6119077 0 1377074642
7951 6119078 0 1377074534


根据第一列的值去重 对第三列求和
2669 次点击
所在节点    程序员
11 条回复
vibbow
2013-08-21 18:01:25 +08:00
直接导入数据库就好了吗!
反正是一次性的东西,不需要考虑效率,怎么简单怎么来。
felix021
2013-08-21 18:11:15 +08:00
@vibbow 所以才不适合用数据库,太麻烦。

@kenneth
cat data | sort -uk 1 | awk '{s+=$3}END{print s}'
kenneth
2013-08-21 18:17:07 +08:00
@felix021 我只得到了一个值26 ,能否显示
13788 xxx
7951 xxx
leoleozhu
2013-08-21 18:23:44 +08:00
上面的,改成一个dict就可以都有了
amyangfei
2013-08-21 18:43:19 +08:00
cat data.txt | awk '{a[$1] += $3}END{for (i in a) print i, a[i]}'
vibbow
2013-08-21 19:25:57 +08:00
导入数据库很简单,直接转csv导入就行

然后直接
SELECT COL1, SUM(COL3) GROUP BY COL1
vibbow
2013-08-21 20:09:20 +08:00
用MYSQL做了一次,耗时不到2分钟

结果:
13788 7
1489 6
7951 5
vibbow
2013-08-21 20:13:05 +08:00
既然用到了数据库,当然也可以统计去重的次数了~~~
SELECT `COL1`, SUM(`COL3`) AS 'SUM', COUNT(`COL1`) AS 'COUNT' FROM a GROUP BY `COL1`

COL1 SUM COUNT
13788 7 21
1489 6 80
7951 5 40
vibbow
2013-08-21 20:17:42 +08:00
如果第三列只是0或者1的话,也可以这样玩~~

SELECT `COL1`, COUNT(`COL1`) AS 'COUNT' FROM `a` WHERE `COL3` = "1" GROUP BY `COL1`
czheo
2013-08-21 21:05:00 +08:00
awk '$3>0{print $1}' test | sort | uniq -c
czheo
2013-08-21 21:08:56 +08:00
awk '{a[$1] = a[$1]+$3;}END{for(i in a) print i,a[i]}' test

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/79776

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX