如何修改Linux Shell脚本获取最值并显示所有对应学生?
实现方案
直接上可用的脚本,附带简单说明:
完整Shell脚本
#!/bin/bash # 先检查目标文件是否存在 [ ! -f "notas.txt" ] && echo "错误:notas.txt 文件找不到" && exit 1 # 提取所有分数,排序去重后拿到最高、最低分 all_scores=$(cut -d';' -f2 notas.txt | sort -n | uniq) max_score=$(echo "$all_scores" | tail -1) min_score=$(echo "$all_scores" | head -1) # 处理最高分学生:筛选对应行,转格式,对齐后拼接 max_list=$(grep ";$max_score$" notas.txt | sed 's/;/ /' | awk '{printf "%-6s %d", $1, $2}' | paste -sd ', ') # 处理最低分学生,逻辑同上 min_list=$(grep ";$min_score$" notas.txt | sed 's/;/ /' | awk '{printf "%-6s %d", $1, $2}' | paste -sd ', ') # 按要求输出 echo "Max: $max_list" echo "Min: $min_list"
关键步骤说明
- 文件检查:避免因文件不存在导致脚本报错
- 分数提取:用
cut拆分每行内容拿到分数,排序去重后快速定位最高、最低分 - 学生格式化:
grep精准匹配对应分数的学生行sed把分号换成空格,调整成"学生名 分数"的形式awk的%-6s让学生名左对齐占6个字符位,保证输出整齐paste把多个学生的信息用", "连成一行
- 输出样式:完全贴合要求的格式,重复分数的学生都会显示出来
测试效果
如果notas.txt内容是:
marta;70
luis;70
pepe;5
ana;5
maria;45
运行脚本后会输出:
Max: marta 70, luis 70
Min: pepe 5, ana 5
内容的提问来源于stack exchange,提问作者A. Cedano
相关产品推荐
相关产品推荐

