平均使用shell脚本或awk

时间:2015-11-05 09:15:52

标签: linux 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

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

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 个答案:

答案 0 :(得分:2)

<?php

mysql_connect("localhost","root","");
mysql_select_db("rohan");
$s="select * from black";
$resource=mysql_query($s);
$row = mysql_fetch_row($resource);


            echo "ID: ".row[0]."<br>";
            echo "Name: ".row[1]." ".row[2]."<br>";
            echo "E-mail: ".row[3]."<br>";
            echo "country: ".row[4]."<br>";
            echo "salary: ".row[5]."<br>";

更新

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

答案 1 :(得分:1)

您的awk将计算平均值,但bash不会进行浮点运算。您可以随时使用bc

$ echo "$ave1 - $ave2" | bc

-101.429

对于表达式,您还必须使用$(( ... ))