gpt4 book ai didi

AWK程序求三个州的平均降雨量

转载 作者:行者123 更新时间:2023-12-04 14:21:41 26 4
gpt4 key购买 nike

我想查找从 Jan 到 Dec 的特定月份的任何三个州(例如 CA、TX 和 AX)的平均降雨量。给定由 TAB SPACES 分隔的输入文件,格式为城市名称、州,然后是 1 月到 12 月的平均降雨量,然后是所有月份的年平均值。 EG可能看起来像

AVOCA   PA  30  2.10    2.15    2.55    2.97    3.65    3.98    3.79    3.32     3.31   2.79    3.06    2.51    36.18
BAKERSFIELD CA 30 0.86 1.06 1.04 0.57 0.20 0.10 0.01 0.09 0.17 0.29 0.70 0.63 5.72

我想做的是“获取特定月份 feb 的平均降雨量总和,比方说 n 年,然后找到 CA、TX 和 AX 州的平均值。

我已经用 awk 编写了下面的脚本来做同样的事情,但它没有给我预期的输出

/^CA$/ {CA++; CA_SUM+= $5} # ^CA$ - Regular Expression to match the word CA only 
/^TX$/ {TX++; TX_SUM+= $5} # ^TX$ - Regular Expression to match the word TX only
/^AX$/ {AX++; AX_SUM+= $5} # ^AX$ - Regular Expression to match the word AX only
END {
CA_avg = CA_SUM/CA;
TX_avg = TX_SUM/TX;
AX_avg = AX_SUM/AX;
printf("CA Rainfall: %5.2f",CA_avg);
printf("CA Rainfall: %5.2f",TX_avg);
printf("CA Rainfall: %5.2f",AX_avg);
}

我用命令调用程序 awk 'FS="\t"'-f awk1.awk rainfall.txt 看不到任何输出。

问题:我在哪里滑倒了?任何建议和更改的代码将不胜感激

最佳答案

模式 /^CA$/ 表示字符“C”和“A”是行中唯一的字符。你想要:

$2 == "CA" {CA++; CA_SUM+= $5}
# etc.

然而,这是干燥机:

{ count[$2]++; sum[$2] += $5 }
END {
for (state in count) {
printf("%s Rainfall: %5.2f\n", state, sum[state]/count[state])
}
}

此外,这看起来是错误的:awk 'FS="\t"'-f awk1.awk rainfall.txt
尝试:awk -F '\t' -f awk1.awk rainfall.txt


评论回复:

awk -F '\t' -v month=2 -v states="CA,AZ,TX" '
BEGIN {
month_col = month + 3 # assume January is month 1
split(states, wanted_states, /,/)
}
{ count[$2]++; sum[$2] += $month_col }
END {
for (state in wanted_states) {
if (state in count) {
printf("%s Rainfall: %5.2f\n", state, sum[state]/count[state])
else
print state " Rainfall: no data"
}
}
' rainfall.txt

关于AWK程序求三个州的平均降雨量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950778/

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