如何在Linux shell中以多种可能性获取最大值和最小值?

A. *_*ano 1 linux bash awk

这个 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.txt

pepe;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)

我怎样才能实现它?

tri*_*eee 5

使用 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信息页面包含基本学习资源的链接。学习该语言的基础知识既快速又简单(花一个小时,您就会有一个好主意)。