Linux 如何使用Shell查找区间的平均值和最大值
我想从一列中提取每6个数字间隔的总和、平均值和平均值。 我发现很多关于这个问题的讨论,但都是针对整个专栏的。e、 g 要计算列的和,请执行以下操作: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
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
太好了!!多谢各位