Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用Shell查找区间的平均值和最大值_Linux_Bash_Shell_Unix_Awk - Fatal编程技术网

Linux 如何使用Shell查找区间的平均值和最大值

Linux 如何使用Shell查找区间的平均值和最大值,linux,bash,shell,unix,awk,Linux,Bash,Shell,Unix,Awk,我想从一列中提取每6个数字间隔的总和、平均值和平均值。 我发现很多关于这个问题的讨论,但都是针对整个专栏的。e、 g 要计算列的和,请执行以下操作: awk '{sum+=$1} END { print sum}' 要计算平均值: awk '{sum+=$1} END { print sum/NR}' 要查找最大值或最小值,可以使用sort命令 我需要在一段时间内完成所有这些。e、 例如,我的输入文件是 inputfile.txt 1 3 2 5 3 4 4

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

要计算列的和,请执行以下操作:

awk '{sum+=$1} END { print sum}'
要计算平均值:

awk '{sum+=$1} END { print sum/NR}'
要查找最大值或最小值,可以使用sort命令

我需要在一段时间内完成所有这些。e、 例如,我的输入文件是

 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
输出文件是

 sum.txt
 1   18
 2   16
 3   24

 average.txt
 1   3
 2   2.67
 3   4

 maximum.txt
 1   5
 2   4
 3   7

这一方并不是要编写整个程序,而这正是你要求我们做的

你需要做的是记录你读了多少行,然后每读第六行就产生一个输出。考虑这样的事情:

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

我不打算解释我做了什么,因为我希望你能在互联网上搜索
awk
教程,了解我自己在做什么。

在你问任何问题之前,请先搜索一下,很多帖子已经在那里了

您可以尝试下面的方法,进行相应的修改

输入

[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 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 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 maximum.txt 
1 5
2 4
3 7
平均值

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

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

可能的重复我认为第一个数字是行号,而不是文件本身的任何内容。您希望将输入文件拆分为6个数字的部分,然后输出总和、平均值和最大值。到目前为止这是正确的吗?是的@chw21。你说得对。第一列是序列号。谢谢。它工作得很好。我试着在相同的过程中找出最小值,加上min=min<$2?最低:2美元。但不起作用。你能告诉我我是否做错了什么吗?试试
min=min=“&&min<2美元?最低:$2
太好了!!多谢各位