AWK:计算文件中每个职业的平均年龄平均值。

时间:2016-12-05 20:38:52

标签: for-loop awk each average

输入:

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

$ 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