如何优化awk输出可读性?实现指定高低分输出格式
修改AWK代码实现指定输出格式
现有AWK代码用于筛选分数最高和最低的学生,但输出格式不够直观,需要调整为更清晰的样式。
现有代码
awk -F ';' 'NR==1 { min = max = $2; mina = maxa = $1 " " $2; next } $2==max { maxa = maxa ", " $1 " " $2 } $2==min { mina = mina ", " $1 " " $2 } $2>max { max = $2; maxa = $1 " " $2 } $2<min { min = $2; mina = $1 " " $2 } END { print "Max:", maxa print "Min:", mina }' notas.txt
输入文件(notas.txt)内容
pepe;5 marcos;7 marta;70 luis;70 ana;5 pedro;9 paco;70 pepa;7 rosa;5 manu;8
当前输出
Max: marta 70, luis 70, paco 70 Min: pepe 5, ana 5, rosa 5
期望输出
Max: 70 [marta,luis,paco] Min: 5 [pepe,ana,rosa]
修改后的代码
awk -F ';' 'NR==1 { min = max = $2; max_names = $1; min_names = $1; next } $2 == max { max_names = max_names "," $1 } $2 == min { min_names = min_names "," $1 } $2 > max { max = $2; max_names = $1 } $2 < min { min = $2; min_names = $1 } END { printf "Max: %d [%s]\n", max, max_names; printf "Min: %2d [%s]\n", min, min_names; }' notas.txt
代码修改说明
- 拆分存储逻辑:分别维护最高分/最低分的数值,以及对应的学生名字列表,不再重复存储分数信息
- 遇到同分数学生时,仅追加名字而非重复分数内容
- 用
printf实现精准格式化:先输出分数,再用方括号包裹名字列表;最低分通过%2d实现与最高分的对齐效果
内容的提问来源于stack exchange,提问作者A. Cedano
相关产品推荐
相关产品推荐

