我想从列中提取每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
答案 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