2016-12-05 250 views
0

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

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

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
$ 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