这个 shell 脚本为我提供了最大值和最小值,但我想在重复时获取这些值和相关的学生。
#!/bin/sh
Notamax=0
Notamin=0
alumneMax=''
alumneMin=''
while IFS=";" read alumne nota
do
(( nota > Notamax )) && Notamax=$nota alumneMax=$alumne
(( nota < Notamin || Notamin == 0)) && Notamin=$nota alumneMin=$alumne
done <notas.txt
echo "Nota maxima $Notamax ** Alumnos con nota maxima: $alumneMax"
echo "Nota minima $Notamin ** Alumnos con nota minima: $alumneMin"
Run Code Online (Sandbox Code Playgroud)
notas.txtpepe;5
marcos;7
marta;70
luis;70
ana;5
Run Code Online (Sandbox Code Playgroud)
Nota maxima 70 ** Alumnos con nota maxima: marta
Nota minima 5 ** Alumnos con nota minima: pepe
Run Code Online (Sandbox Code Playgroud)
Max: marta 70, luis 70
Min: pepe 5, ana 5
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现它?
使用 Awk 可以更轻松、更通用。另请参阅与 相比,Bash循环非常慢,为什么?while readcat
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
Run Code Online (Sandbox Code Playgroud)
您的输出格式有点嘈杂;我个人更喜欢冗余更少且机器可读的显示器。
标签awk信息页面包含基本学习资源的链接。学习该语言的基础知识既快速又简单(花一个小时,您就会有一个好主意)。
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |