gpt4 book ai didi

Linux shell 脚本 - 简单的 awk 脚本问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:01 25 4
gpt4 key购买 nike

我正在尝试做一个非常简单的 awk 脚本练习,但无法弄清楚为什么它不起作用。

awk 脚本应该只用于显示以 2012 开头的条目,因此给定以下输入文件:

  2009 Dec X 29.44
2009 Dec Y 32.32
2012 Jan X 321.11
2012 Feb Y 1.99
2012 Feb X 32.99
2012 Mar X 11.45
2010 Jan X 14.75
2011 Feb Y 21.00
2011 Mar X 7.77

输出应该如下:

 % awk -f awkscriptfile inputfile
Data for year 2012
==================
Jan : 321.11
Feb : 1.99
Feb : 32.99
Mar : 11.45
===================
volume for 2012 is: 367.54
4 records processed
%

但是,我得到的是:

% awk -f awkscriptfile inputfile
Data for year 2012
==================================
2009 Dec X 29.44
2009 Dec Y 32.32
2012 Jan X 321.11
Jan : 321.11
2012 Feb Y 1.99
Feb : 1.99
2012 Feb X 32.99
Feb : 32.99
2012 Mar X 11.45
Mar : 11.45
2010 Jan X 14.75
2011 Feb Y 21.00
2011 Mar X 7.77
==================================
volume for 2012 is: $sum
$count records processed
%

所以 awk 脚本显然打印出的内容比它应该打印的多得多,并且出于某种原因没有打印 sum 和 count 变量。

这是我的 awk 脚本代码:

BEGIN {
print "Data for year 2012"
print "=================================="
count = 0
sum = 0
}
$1 ~ /2012/ {
print $2, " : ", $4
count++
sum += $4
}
END {
print "=================================="
print "volume for 2012 is: $sum"
print "$count records processed"
}

从我正在查看的所有引用资料来看,我看不出为什么这段代码不能工作。希望其他人可以告诉我我做错了什么。

最佳答案

awk -v y="2012" '$1==y{a[NR]=$2":"$4;s+=$4;c++}
END{line="===================";
printf "Data for year %s\n%s\n",y,line;
for(i=1;i<=NR;i++)if(a[i])print a[i]
printf "%s\nvolume for %s is: %.2f\n%d records processed\n", line, y, s, c}' file

使用您的数据,它输出:

Data for year 2012
===================
Jan:321.11
Feb:1.99
Feb:32.99
Mar:11.45
===================
volume for 2012 is: 367.54
4 records processed

关于Linux shell 脚本 - 简单的 awk 脚本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26592711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com