Chinaunix

标题: 急,在线等,不用sort和uniq,如何处理文本 [打印本页]

作者: wzl189189    时间: 2015-09-06 12:03
标题: 急,在线等,不用sort和uniq,如何处理文本
  
    有一个文本,处理的需求如下:
     a.txt文本内容如下:
        139123456|a|baidu.com|2|aa
        137222222|b|gogle.com|2|cc
        138333332|a|gogle.com|2|dd
        139232256|b|baidu.com|2|aa
        139123456|a|gogle.com|2|cc
        139123456|a|baidu.com|2|aa

1、在不用sort和uniq的情况下,计算当第一列前6位等于139123时,对第3列去重后总数,想要的结果如下:
    2

2、 在不用sort和uniq的情况下,计算当第一列前6位等于139123,并且第二列等a的时候,对第3列和第5列去重个数,想要的结果如下:
   baidu.com 1
   gogle.com 1
作者: MMMIX    时间: 2015-09-06 12:08
回复 1# wzl189189


    为啥不用 sort 和 uniq 呀?
作者: wzl189189    时间: 2015-09-06 12:20
感觉数组好用一些
作者: jason680    时间: 2015-09-06 12:30
本帖最后由 jason680 于 2015-09-06 12:34 编辑

急?
http://bbs.chinaunix.net/thread-4137818-1-1.html

1 ...第一列前6位等于139123时,对第3列去重后总数...
$ awk -F'|' '{if(substr($1,1,6)=="139123")if(!a[$3]++)...' FILE
2

2 ...第一列前6位等于139123,并且第二列等a的时候,对第3列和第5列去重个数,...

$ awk -F'|' '{if(substr($1,1,6)=="139123"&&$2=="a")if(!a[$3","$5]++)...}' FILE
gogle.com 1
baidu.com 1
作者: wzl189189    时间: 2015-09-06 12:46
回复 4# jason680

-------------------------
")if(!a[$3]++)...   

  关键要的就是省略号这一步啊,我想用 print $(#a
  • )    但这样做不行啊,我就是想要计算一个数组的结果啊,而不是列出来,你这个省略号究竟是啥?

       
    作者: hjfeng1988    时间: 2015-09-06 14:24
    都去重了,还要统计什么个数。
    作者: 我爱你我的菜    时间: 2015-09-06 14:57
    1、awk -F'|' '/^139123/{if(!a[$3]++)count++;} END{print count}' test.txt
    2、awk -F'|' '/^139123/{if(!a[$3","$5]++)b[$3]++} END{for(i in b) print i,b[i]}' test.txt
    作者: wzl189189    时间: 2015-09-06 15:32
    回复 4# jason680

    ---------------------------------------------

        我本来是用这个 print $(#a
  • ),计算出个数,但尝试后发现都是错的,请教下,这个怎么能用到你上面的脚本?
    作者: jason680    时间: 2015-09-06 15:42
    回复 8# wzl189189

    请看7楼
       
    作者: wzl189189    时间: 2015-09-06 16:14
    我爱你我的菜 发表于 2015-09-06 14:57
    1、awk -F'|' '/^139123/{if(!a[$3]++)count++;} END{print count}' test.txt
    2、awk -F'|' '/^139123/{if ...


       谢谢了




    欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2