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

使用shell脚本或awk平均选定条目后两个文件之间的差异,shell,awk,Shell,Awk,我有两个文件。每一个都有一列,其中缺少一些数据,如9999000。e、 g ifile1.txt ifile2.txt 30 20 9999 10 10 40 40 30 10 31 29 9000 9000 9999 9999 9999 31 1250 550 29 我想计算上述两个

我有两个文件。每一个都有一列,其中缺少一些数据,如9999000。e、 g

ifile1.txt    ifile2.txt
30            20
9999          10
10            40
40            30
10            31
29            9000
9000          9999
9999          9999
31            1250
550           29
我想计算上述两个文件中的平均值(大于10)之间的差异,而不考虑缺少的值。i、 e

average ( the entries > 10 in ifile1.txt) - average (the entries > 10 in ifile2.txt)
请注意:平均值仅适用于所选值,即大于10的值,例如

(30+40+29+31+550/5) in ifile1.txt
我在这里问了一个类似的问题,并像这样尝试,但得到了错误

awk '($0>10) && !/9000|9999/{a[ARGIND]+=$0;b[ARGIND]++}END{print a[1]/b[1]-a[2]/b[2]}' file1 file2
对于第一个文件(
NR==FNR
),对于大于
10
且不完全等于
9999或9000
的值,将值添加到变量
s1
。同时增加计数变量
n1
。因此,
s1/n1
给出了第一个文件的平均值。同样,对于第二个文件(
NR!=FNR
),更新变量
s2
n2
。在
结束
块中,打印平均值的差值。

试试这个awk:

awk '$1>10 && $1 !~ /^(9000|9999)$/{a[ARGIND]+=$1; b[ARGIND]++}
       END{printf "%.2f\n", a[1]/b[1]-a[2]/b[2]}' ifile[12].txt
输出:

-97.33

你的预期产出是多少?@anubhava。。它是-97.33。A.M.D.已经试过了。但仍然没有解决。平均值应仅超过所考虑的值,即仅大于10的值。非常感谢,还有一些问题。因为平均值应仅超过所考虑的值,即仅大于10的值。另外,我可以问一下
之间的区别吗/9000 | 9999/
/^9999$^9000$/
?非常感谢您的回答。请问
ifile[12].txt
是否与
ifile1.txt ifile2.txt
相同?还有
$1>10&&$1!~/^(9000 | 9999)$/
$1>10&&/9000 | 9999/
?谢谢你解决我的问题。是的
ifile[12]。txt与ifile1.txt ifile2.txt和
相同/9000 | 9999/
也可能匹配
90005
,因此您应该按照我的建议使用锚定。
-97.33