zoukankan      html  css  js  c++  java
  • awk 练习题

    将以下文本以inode为标记,对inode相同的counts进行累加,并且统计出同一inode中,beginnumber的最小值和endnumber的最大值。

    inode|beginnumber|endnumber|counts|
    106|3363120000|3363129999|10000|
    106|3368560000|3368579999|20000|
    310|3337000000|3337000100|101|
    310|3342950000|3342959999|10000|
    310|3362120960|3362120961|2|
    311|3313460102|3313469999|9898|
    311|3313470000|3313499999|30000|
    311|3362120962|3362120963|2|
    

    输出的结果格式为:

    310|3337000000|3362120961|10103|  
    311|3313460102|3362120963|39900|  
    106|3363120000|3368579999|30000|
    

    解答:

    awk -F'|' -v OFS='|' '/^[0-9]/{inode[$1]++; if(!bn[$1]){bn[$1]=$2}else if(bn[$1]>$2){bn[$1]=$2}; if(en[$1]<$3)en[$1]=$3;cnt[$1]+=$(NF-1)} END{for(i in inode)print i,bn[i],en[i],cnt[i]}' inputfile
    
    [root@centos7 ~]# cat t8 
    inode|beginnumber|endnumber|counts|
    106|3363120000|3363129999|10000|
    106|3368560000|3368579999|20000|
    310|3337000000|3337000100|101|
    310|3342950000|3342959999|10000|
    310|3362120960|3362120961|2|
    311|3313460102|3313469999|9898|
    311|3313470000|3313499999|30000|
    311|3362120962|3362120963|2|
    [root@centos7 ~]# awk -F'|' -v OFS='|' '/^[0-9]/{ 
    inode[$1]++ 
    ;if(!bn[$1]){bn[$1]=$2}else if(bn[$1]>$2){bn[$1]=$2} 
    ;if(en[$1]<$3)en[$1]=$3;cnt[$1]+=$(NF-1)} 
    END{for(i in inode)print i,bn[i],en[i],cnt[i]}' t8
    310|3337000000|3362120961|10103
    311|3313460102|3362120963|39900
    106|3363120000|3368579999|30000
    
    书山有路勤为径,学海无涯苦作舟
  • 相关阅读:
    可左右拖动窗口demo
    制作一个简单的百度网盘在线视频加速的chrome插件
    git分支
    使用git的ssh
    git的概念和常用命令
    爬虫:获取页面 -- request库的使用
    字符串方法
    从实现原理更深入了解call和apply
    Git和GitHub使用
    localStorage和sessionStorage
  • 原文地址:https://www.cnblogs.com/haona_li/p/10262513.html
Copyright © 2011-2022 走看看