文本文件内容如下 姓名 性别 年龄 黄坤 汉 21 程万琴 回 19 梁栋 傣 20 张双敏 苗 18 编写Linux中 gawk程序 输出少数民族学生的姓名以及他们的平均年龄,精确到小数点后一位
时间: 2024-04-02 09:34:28 浏览: 61
可以使用以下的 gawk 程序实现:
```bash
gawk '$2 != "汉" {sum += $3; count++} END {printf "少数民族学生的平均年龄为 %.1f 岁\n", sum/count}' 文件名
```
其中,`$2 != "汉"` 表示只对第二列不是汉族的行进行处理,`sum += $3; count++` 表示累加年龄和人数,`END` 表示处理完所有行后执行的操作,`printf` 用于输出结果。注意,需要将文件名替换成实际的文件名。
相关问题
文本文件内容如下 姓名 民族 年龄 黄坤 汉 21 程万琴 回 19 梁栋 傣 20 张双敏 苗 18 编写Linux中 gawk程序 输出少数民族学生的姓名以及他们的平均年龄,精确到小数点后一位
下面是 gawk 程序的代码:
```shell
gawk '$2!="汉" {name[++i]=$1; sum+=$3} END {avg=sum/i; printf("少数民族学生姓名:"); for (j=1; j<=i; j++) printf("%s ",name[j]); printf("\n平均年龄:%.1f\n", avg)}' 文件名
```
其中,`$2!="汉"` 表示筛选出民族不为“汉”的行,即少数民族学生的行,`name[++i]=$1; sum+=$3` 表示将对应的姓名存储到数组 `name` 中,并累加年龄的总和。`END` 表示对筛选出的结果进行操作,`printf` 语句用于输出结果。
注意:代码中的 `文件名` 需要替换为实际的文件名。
文本文件内容如下 姓名 性别 年龄 黄坤 男 21 程万琴 女 19 梁栋 男 20 张双敏 女 18 编写Linux中 gawk程序 输出年龄大于或等于20的男生的姓名以及他们的平均年龄,精确到小数点后一位
你刚才问的问题我已经回答了,请不要重复提问。这里再给出一遍 gawk 程序:
```shell
gawk '{if ($3>=20 && $2=="男") {count++;sum+=$3;name[count]=$1}}
END {printf("年龄大于或等于20的男生的姓名以及他们的平均年龄:\n");
for (i=1;i<=count;i++) printf("%s\n", name[i]);
if (count>0) printf("%.1f\n", sum/count)}' 文件名
```
其中,`$3` 表示第三列,即年龄,`$2` 表示第二列,即性别,`$1` 表示第一列,即姓名。首先判断年龄是否大于等于 20 并且性别为男,如果符合条件,则将计数器 `count` 加一,累加年龄的和 `sum` 加上当前行的年龄,将当前行的姓名存储在名字数组 `name` 中。最后,在 `END` 块中输出姓名数组中的内容,以及计算出的平均年龄(如果有符合条件的男生的话)。
阅读全文