我有两个文件。 每个列都有一个缺失的数据,如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
也为表达式,你必须使用$(( ... ))