仅计算所选数据集的总和和平均值
calculating sum and average only for selected data set only
我有如下数据集:
col-1 col-2 col-3 col-4 col-5 col-6 col-7 col-8
0 17 215 55.7059 947 BMR_42 O22-BMR_1 O23-H23
1 1 1 1.0000 1 BMR_42 O23-BMR_1 O23-H23
2 31 3 1.0968 34 BMR_31 O22-BMR_1 O26-H26
3 11 2 1.0909 12 BMR_31 O13-BMR_1 O26-H26
4 20 5 1.8500 37 BMR_49 O22-BMR_1 O26-H26
5 24 4 1.7917 43 BMR_49 O23-BMR_1 O26-H26
6 41 2 1.0488 43 BMR_49 O12-BMR_1 O12-H12
7 28 2 1.0357 29 BMR_49 O22-BMR_1 O13-H13
8 1 1000 1000.0000 1000 BMR_49 O13-BMR_1 O13-H13
9 1 1 1.0000 1 BMR_22 O12-BMR_2 O22-H22
10 50 62 18.9400 947 BMR_59 O13-BMR_2 O22-H22
11 1 1 1.0000 1 BMR_59 O25-BMR_2 O23-H23
12 34 5 1.1471 39 BMR_59 O13-BMR_2 O23-H23
13 7 6 2.1429 15 BMR_59 O26-BMR_2 O24-H24
14 6 8 3.6667 22 BMR_59 O25-BMR_2 O24-H24
15 28 2 1.1071 31 BMR_10 O26-BMR_2 O26-H26
16 52 121 15.1346 787 BMR_10 O25-BMR_2 O26-H26
17 65 9 1.9231 125 BMR_10 O13-BMR_2 O26-H26
18 4 4 2.2500 9 BMR_59 O26-BMR_2 O26-H26
19 9 1 1.0000 9 BMR_22 O15-BMR_2 O13-H13
20 1 1 1.0000 1 BMR_10 O11-BMR_2 O16-H16
21 7 2 1.1429 8 BMR_53 O13-BMR_2 O16-H16
22 2 3 2.5000 5 BMR_33 O13-BMR_3 O22-H22
23 97 54 6.8247 662 BMR_61 O26-BMR_3 O22-H22
24 1 1 1.0000 1 BMR_29 O26-BMR_3 O23-H23
25 31 36 3.3226 103 BMR_29 O16-BMR_3 O23-H23
(真实文件2000多行)
我想select 特定条件下的数据,并求出它们的总和和平均值。例如,我想在 $7 和 $8 列中 select 包含 O22 的行,并计算 $4 列中值的总和和平均值。
我尝试了如下脚本:
awk ' ~ /O22/ && ~ /O22/ {sum += } END {print sum, (sum/NR) }' hhsolute.lifetime2.dat
此代码可以 select 正确地计算行,但是当我想计算平均值 (sum/NR) 时,我没有得到正确的值。
我希望得到一些帮助。我如何才能只得到我想要的数据线的总和和平均值?
提前感谢任何帮助。
awk -v tgt="O22" '
~ tgt && ~ tgt { sum+=; cnt++ }
END { print sum+0, (cnt ? sum/cnt : 0) }
' file
试试这个:
awk '~/O22/ && ~/O22/{++n;sum+=}END{if(n) print "Sum = " (sum), "Average= "(sum/n)}' File
如果7th
和8th
字段都包含模式O22
,将4th
字段值添加到变量sum
,增加n
。在 END
块中,打印总和和平均值。
我有如下数据集:
col-1 col-2 col-3 col-4 col-5 col-6 col-7 col-8
0 17 215 55.7059 947 BMR_42 O22-BMR_1 O23-H23
1 1 1 1.0000 1 BMR_42 O23-BMR_1 O23-H23
2 31 3 1.0968 34 BMR_31 O22-BMR_1 O26-H26
3 11 2 1.0909 12 BMR_31 O13-BMR_1 O26-H26
4 20 5 1.8500 37 BMR_49 O22-BMR_1 O26-H26
5 24 4 1.7917 43 BMR_49 O23-BMR_1 O26-H26
6 41 2 1.0488 43 BMR_49 O12-BMR_1 O12-H12
7 28 2 1.0357 29 BMR_49 O22-BMR_1 O13-H13
8 1 1000 1000.0000 1000 BMR_49 O13-BMR_1 O13-H13
9 1 1 1.0000 1 BMR_22 O12-BMR_2 O22-H22
10 50 62 18.9400 947 BMR_59 O13-BMR_2 O22-H22
11 1 1 1.0000 1 BMR_59 O25-BMR_2 O23-H23
12 34 5 1.1471 39 BMR_59 O13-BMR_2 O23-H23
13 7 6 2.1429 15 BMR_59 O26-BMR_2 O24-H24
14 6 8 3.6667 22 BMR_59 O25-BMR_2 O24-H24
15 28 2 1.1071 31 BMR_10 O26-BMR_2 O26-H26
16 52 121 15.1346 787 BMR_10 O25-BMR_2 O26-H26
17 65 9 1.9231 125 BMR_10 O13-BMR_2 O26-H26
18 4 4 2.2500 9 BMR_59 O26-BMR_2 O26-H26
19 9 1 1.0000 9 BMR_22 O15-BMR_2 O13-H13
20 1 1 1.0000 1 BMR_10 O11-BMR_2 O16-H16
21 7 2 1.1429 8 BMR_53 O13-BMR_2 O16-H16
22 2 3 2.5000 5 BMR_33 O13-BMR_3 O22-H22
23 97 54 6.8247 662 BMR_61 O26-BMR_3 O22-H22
24 1 1 1.0000 1 BMR_29 O26-BMR_3 O23-H23
25 31 36 3.3226 103 BMR_29 O16-BMR_3 O23-H23
(真实文件2000多行)
我想select 特定条件下的数据,并求出它们的总和和平均值。例如,我想在 $7 和 $8 列中 select 包含 O22 的行,并计算 $4 列中值的总和和平均值。
我尝试了如下脚本:
awk ' ~ /O22/ && ~ /O22/ {sum += } END {print sum, (sum/NR) }' hhsolute.lifetime2.dat
此代码可以 select 正确地计算行,但是当我想计算平均值 (sum/NR) 时,我没有得到正确的值。
我希望得到一些帮助。我如何才能只得到我想要的数据线的总和和平均值?
提前感谢任何帮助。
awk -v tgt="O22" '
~ tgt && ~ tgt { sum+=; cnt++ }
END { print sum+0, (cnt ? sum/cnt : 0) }
' file
试试这个:
awk '~/O22/ && ~/O22/{++n;sum+=}END{if(n) print "Sum = " (sum), "Average= "(sum/n)}' File
如果7th
和8th
字段都包含模式O22
,将4th
字段值添加到变量sum
,增加n
。在 END
块中,打印总和和平均值。