2015-11-05 56 views
0

我有两个文件。每一列都有一列,其中有一些缺失的数据,如9999,9000。平均使用shell脚本或awk后两个文件之间的区别

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

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

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 

回答

2
awk '!/9000|9999/{a[FILENAME]+=$0;b[FILENAME]++}END{for(i in a)c=c?c-a[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?c-a[i]/b[i]:a[i]/b[i];print c}' file1 file2 
+0

我的结果表达式为负值。但上面的脚本并没有给出负面信号。你能建议怎么做吗?非常感谢你。 – Kay

+0

已更新。也许阵列顺序问题 – bian

+0

非常感谢你的答案。如果我使用阈值,你能建议我怎么修改脚本。我在这里问过它http://stackoverflow.com/questions/33666553/difference-between-two-files-after-average-of-selected-entries-using-shell-scrip – Kay

1

awk将计算平均值,但bash将不会做浮点运算。不过,您始终可以使用bc

$ echo "$ave1 - $ave2" | bc 

-101.429

而且你必须使用$((...))

相关问题