2016-12-05 253 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