平均使用shell脚本或awk后两个文件之间的差异

我有两个文件。 每个列都有一个缺失的数据,如9999,9000

ifile1.txt ifile2.txt 30 20 9999 10 10 40 40 30 10 31 29 9000 9000 9999 9999 9999 31 1250 550 29 

我想计算上述两个文件的平均值之间的差异,而不考虑缺less的值。 即

 average (ifile1.txt) - average (ifile2.txt) 

我试过这样,但没有得到结果。

 ave1=$(awk '!/\9999/ && !/\9000/{sum += $1; count++} END {print count ? (sum/count) : count;sum=count=0}' ifile1.txt) ave2=$(awk '!/\9999/ && !/\9000/{sum += $1; count++} END {print count ? (sum/count) : count;sum=count=0}' ifile2.txt) result=$(ave1-ave2) echo $result 

 awk '!/9000|9999/{a[FILENAME]+=$0;b[FILENAME]++}END{for(i in a)c=c?ca[i]/b[i]:a[i]/b[i];print c}' file1 file2 

更新:

 awk '!/9000|9999/{a[ARGIND]+=$0;b[ARGIND]++}END{print a[1]/b[1]-a[2]/b[2]}' file1 file2 

要么

 awk '!/9000|9999/{a[ARGIND]+=$0;b[ARGIND]++}END{for(i=1;i<=ARGIND;i++)c=c?ca[i]/b[i]:a[i]/b[i];print c}' file1 file2 

你的awk会计算平均值,但bash不会做浮点运算。 你可以随时使用bc

 $ echo "$ave1 - $ave2" | bc 

-101.429

也为表达式,你必须使用$(( ... ))