我有一个名为test.txt
的文件,其中包含以下内容:
10
200
3000
=======
4
5
=======
我需要编写一个awk脚本来将此文件中的文本作为awk脚本和输出的输入:
10
200
3000
Average 1070.00
4
5
Average 4.50
我这样写了我的剧本:
{while($1!~"=======") s+=$1;}
{print "Average ", s}
每次运行此代码时,我都会使用:
awk -f awrp4 test.txt
但它崩溃了。我不知道自己做错了什么。我是一名初学者并且正在尝试了解awk功能,所以如果这看起来相当简单,我会道歉。欢迎任何帮助。
答案 0 :(得分:2)
使用GNU awk,你可以写:
gawk '
BEGIN {FS = "\n"; RS = "\n=+\n"}
NF > 0 {
sum = 0
for (i=1; i<=NF; i++) {
print $i
sum += $i
}
printf "Average %.2f\n", sum/NF
}
' file
答案 1 :(得分:1)
格伦的解决方案当然没有错,但对你来说可能有点先进。也许这更适合:
{
if ($1 == "=======") {
print "\nAverage " s/i "\n";
s=0;
i=0;
} else {
print $1;
s += $1;
i += 1;
}
}
正如我在评论中提到的,awk
的本质是循环遍历文本文件的每一行。除非您正在进行一些后期处理或使用数组,否则while
循环可能没什么用处。
答案 2 :(得分:0)
awk '$1~/^[[:digit:]]/ {i++; sum+=$1; print $1} $1!~/[[:digit:]]/ {print "Average", sum/i; sum=0;i=0}' file