【问题标题】:AWK: Count age mean average for each profession in file.AWK:计算档案中每个职业的平均年龄。
【发布时间】:2017-04-20 08:33:48
【问题描述】:

输入:

name;surname;street;profession;sex;age;city
name1;surname1;street1;prof1;male;22;city1
name2;surname2;street2;prof2;male;25;city2
name1;surname1;street1;prof1;male;23;city3

数据存储在 *.csv 文件中,目标是计算每个职业的平均年龄。所以,预期的输出是:

avg of prof1 = 22,5
avg of prof2 = 25

【问题讨论】:

    标签: for-loop awk each average


    【解决方案1】:

    awk 来救援!

    $ awk -F';' 'NR>1 {k=$4; sum[k]+=$6; count[k]++} 
                 END  {for(k in sum) print "avg of " k " = " sum[k]/count[k]}' file
    
    avg of prof1 = 22.5
    avg of prof2 = 25
    

    【讨论】:

      【解决方案2】:
      $ cat age.awk
      BEGIN   {
          FS = ";"
      }
      
      NR == 1 {
          for (i = 1; i <= NF; i++) { # where are profession and age?
              if ($(i) == "profession") pro_id = i
              if ($(i) == "age")        age_id = i
          }
          next
      }
      
      {
          pro = $(pro_id)
          age = $(age_id)
      
          av[pro] += age
           n[pro] ++
      }
      
      END {
          for (pro in av) av[pro] /= n[pro]
          for (pro in av)
              printf "avg of %s = %s\n", pro, av[pro] | "sort"
      }
      

      用法:

      $ awk -f age.awk file.csv
      

      【讨论】:

        猜你喜欢
        • 2021-12-23
        • 2023-03-28
        • 2014-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-31
        • 2019-11-05
        • 2020-07-26
        相关资源
        最近更新 更多