如何使用Shell查找间隔中的平均值和最大值

时间:2015-06-17 04:35:14

标签: linux bash shell unix awk

我想从列中提取每6个数字区间的总和,平均值和平均值。 我发现很多关于这个问题的讨论,但所有这些都是针对整个专栏的。 e.g。

计算列的总和:

CREATE VIEW

计算平均值:

awk '{sum+=$1} END { print sum}'

要查找最大值或最小值,可以使用sort命令。

我需要在一个区间内完成所有这些。例如,我的输入文件是

awk '{sum+=$1} END { print sum/NR}'

输出文件

 inputfile.txt
 1     3
 2     5
 3     4
 4     3
 5     2
 6     1
 7     3
 8     3
 9     4
 10    2
 11    2
 12    2
 13    5
 14    4
 15    2
 16    3
 17    7
 18    3

2 个答案:

答案 0 :(得分:1)

这方面并不意味着要编写整个程序,这基本上就是你要求我们做的事情。

您需要做的是跟踪您已阅读的行数,然后记录您生成输出的每第6行。考虑这样的事情:

awk '{sum += $1} (NR%6)==0 {print(sum); sum=0}' input.txt

我不会解释我的所作所为,因为我希望您能够在互联网上搜索awk教程,并了解我自己在做什么。

答案 1 :(得分:1)

请在搜索任何问题之前进行搜索

您可以尝试以下内容,相应地进行修改

<强>输入

[akshay@localhost tmp]$ cat input.txt 
1 3
2 5
3 4
4 3
5 2
6 1
7 3
8 3
9 4
10 2
11 2
12 2
13 5
14 4
15 2
16 3
17 7
18 3

<强>脚本

[akshay@localhost tmp]$ cat test.awk
{
    sum += $2
    max  = max > $2 ? max : $2
}
!(FNR%6){
        print ++c,sum   > "sum.txt"
        print c,sum/6   > "average.txt"
        print c,max     > "maximum.txt"
        sum = max = ""
}

<强>输出

[akshay@localhost tmp]$ awk -f test.awk input.txt 

<强>萨姆

[akshay@localhost tmp]$ cat sum.txt 
1 18
2 16
3 24

<强>平均

[akshay@localhost tmp]$ cat average.txt 
1 3
2 2.66667
3 4

<强>最大

[akshay@localhost tmp]$ cat maximum.txt 
1 5
2 4
3 7