V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kenneth
V2EX  ›  程序员

请教一个AWK问题

  •  
  •   kenneth · 2013-08-21 17:39:47 +08:00 · 2663 次点击
    这是一个创建于 4123 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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


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

    @kenneth
    cat data | sort -uk 1 | awk '{s+=$3}END{print s}'
    kenneth
        3
    kenneth  
    OP
       2013-08-21 18:17:07 +08:00
    @felix021 我只得到了一个值26 ,能否显示
    13788 xxx
    7951 xxx
    leoleozhu
        4
    leoleozhu  
       2013-08-21 18:23:44 +08:00 via Android
    上面的,改成一个dict就可以都有了
    amyangfei
        5
    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
        6
    vibbow  
       2013-08-21 19:25:57 +08:00
    导入数据库很简单,直接转csv导入就行

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

    结果:
    13788 7
    1489 6
    7951 5
    vibbow
        8
    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
        9
    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
        10
    czheo  
       2013-08-21 21:05:00 +08:00
    awk '$3>0{print $1}' test | sort | uniq -c
    czheo
        11
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3531 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:50 · PVG 18:50 · LAX 02:50 · JFK 05:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.