【发布时间】:2016-05-27 02:52:35
【问题描述】:
我有一个包含多种缺失值的数据集,例如 9990、9999、9999000、999999 等等。但都大于 9990。我想取每 24 个值的平均值。我正在尝试使用以下命令,但没有得到我想要的输出。
awk '{if ($1 < 9990) sum += $1; count++} NR%24==0{print count ? (sum) :9999;sum=count=0}'ifile
例如:我需要以下数据中每3行的平均值
3
3
4
9999
4
99990
13
3
999999
9999
9991
99954
我试过这个,但显示不同的结果:
awk '{if ($1 < 9990)sum += $1; count++} NR%3==0{print count ? (sum/count) :9999;sum=count=0}'ifile
我的愿望输出是
3.33
4 Average of 9999 4 99990 is done with 4/1. Because 9999 and 99990 are undefined values.
8 Average of 13 3 999999 is done with (13+8)/2. Because 999999 is an undefined value, so excluded from the average.
9999 All are undefined values, so denoted as 9999.
【问题讨论】:
-
为什么 9999、9991 和 99954 的平均值等于 9999,而在所有其他情况下大于 9990 的值都会被忽略?
-
您的 awk 脚本只是对大于 9990 的行求和。这不是与您想要的相反吗?您还需要 24 或 3 个值的平均值吗?对于 24,您的示例数据中没有足够的数据。
-
是的。我现在修改了。但仍然没有打印出期望的结果。
-
我认为我们都在指出问题、您的尝试和期望的输出似乎都解决了不同的问题 - 是什么?
-
例如,当三行中的所有三行的值都大于 9990 时,即总和为零 - 为什么“平均值”为 9999?这是哪里来的?