使用shell脚本或awk平均选定条目后两个文件之间的差异
我有两个文件。每一个都有一列,其中缺少一些数据,如9999000。e、 g使用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 我想计算上述两个
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