美文网首页
awk相同行名数据求和或求均值(二维数组形式)

awk相同行名数据求和或求均值(二维数组形式)

作者: 吃吃吃_就知道吃 | 来源:发表于2023-05-22 12:38 被阅读0次

需要求和或求均值文件为tab分割,第一行为列名,第一列为有重复名的数据,其他列为数值,示例:


image.png

使用awk求和:

awk -v ty=sum 'BEGIN{FS=OFS="\t"}NR==1{print $0;ncol=NF}NR>1{if($1 in che){dup[$1]+=1;for(i=1;i<NF+1;i++){num[$1,i]=$i+num[$1,i]}}else{che[$1]=$0;for(i=1;i<NF+1;i++){num[$1,i]=$i}}}END{for(i in che){if(i in dup){if(ty=="sum"){printf i"\t";for(j=2;j<NF;j++){printf num[i,j]"\t"}print num[i,NF]}else if(ty=="mean"){dup[i]+=1;printf i"\t";for(j=2;j<NF;j++){printf num[i,j]/dup[i]"\t"}print num[i,NF]/dup[i]}}else{print che[i]}}}' 111

结果:


image.png

求均值也是相同的命令,只是ty改成mean,结果:


image.png

思路是在读取时用二维数组定位每一个值,再判断行名是否重复,重复的相加,记录相加次数;读取结束后判断,如果是无重复的则直接输出,节省时间和算力;如果是有重复的,再判断参数是sum还是mean,如果是mean就将sum值除以相加次数即可

awk -v ty=sum 'BEGIN{FS=OFS="\t"}NR==1{
  print $0;ncol=NF}NR>1{
  if($1 in che){
    dup[$1]+=1;
    for(i=1;i<NF+1;i++){
        num[$1,i]=$i+num[$1,i]
     }
  }else{
    che[$1]=$0;
    for(i=1;i<NF+1;i++){
      num[$1,i]=$i
    }
  }
 }END{
   for(i in che){
     if(i in dup){
        if(ty=="sum"){
           printf i"\t";
           for(j=2;j<NF;j++){
             printf num[i,j]"\t"}print num[i,NF]
        }else if(ty=="mean"){
           dup[i]+=1;
           printf i"\t";
           for(j=2;j<NF;j++){
             printf num[i,j]/dup[i]"\t"}print num[i,NF]/dup[i]
        }
      }else{
       print che[i]
      }
     }
}'

相关文章

  • 第七章二维数组

    格式 格式2:数据类型[][] 数组名 = new 数据类型[m][]; 遍历二维数组 二维数组求和

  • awk 实现同组数据求和&&求均值

    说明 需要样本分组文件f1和数据矩阵文件f2,分隔符都为 \t;f1的第一列为f2的列名,第二列为分组组名(会根据...

  • 2019-05-14

    日志文本筛选-sort awk 求最大值: 求最小值: 求和: 求平均值: 求最大值 求最大值 求最小值 中位数

  • awk统计示例

    (1)awk求和 (2)平均值 (3)求最大值 (4)求最小值(min的初始值设置一个超大数即可) (5)统计文件...

  • 数组 2

    ###二维数组: 二维数组的一般定义形式:<存储类型><数据类型><数组名>[常量表达式1][常量表达式2] 其中...

  • awk集锦

    摘要 整理awk命令常用的知识点,这里会整理现成demo实例 第一列相同,第二列相加 求和 求平均值 求最大最小值...

  • python:numpy数组常用的统计函数

    数据准备: 求和 求均值 求中值 求最大值和最小值 求极值(最大值和最小值之差)、 6、标准差

  • JS 数组求和与数组求平均值

    js 数组求和与求平均值,时间紧迫,没从网上获取更简洁的方式。所以我给Array 拓展了两个函数,供大家参考 如果...

  • 643-子数组最大平均数 I

    求长度为 k 的子数组的最大平均值,滑动窗口法,保持窗口大小为 k,进行滑动。 用累加数组来计算,对于子数组求和问...

  • 使用KVO高效开发--开发中的一些小技巧

    使用KVO 获取数组里的最大值、最小值、平均值、求和 删除数组里面重复数据 使用distinctUnionOfOb...

网友评论

      本文标题:awk相同行名数据求和或求均值(二维数组形式)

      本文链接:https://www.haomeiwen.com/subject/swxtedtx.html