我已经尝试处理这个问题一段时间了,我是 shell 编程的新手,有人可以帮助我吗?

I have been trying to deal with this issue for a while now, I am a newbie in shell programming, can anyone help me out?

(已编辑)

我有以下代码:

#!/bin/bash
exec 3< lista.csv
read -u 3 header
nota1=0
id1=0
nota2=0
id2=0
nota3=0
id3=0
g=1
while [ "$g" -eq 1 ]
do
g=0
while IFS="," read -u 3 -r id nume prenume grupa seria nota
do
if [ "$nota" -gt "$nota1" ]
then
g=1
nota3="$nota2"
id3="$id2"
nota2="$nota1"
id2="$id1"
nota1="$nota"
id1="$id"
fi
done
done
while IFS=, read -u 3 -r id nume prenume grupa seria nota
do
    if [ "$id" -eq "$id1" ]; then
echo "Nume: $nume"
echo "Prenume: $prenume"
echo "Grupa: $grupa"
echo "Seria: $seria"
echo "Nota: $nota"
echo
    fi
done
while IFS=, read -u 3 -r id nume prenume grupa seria nota
do
    if [ "$id" -eq "$id2" ]; then
echo "Nume: $nume"
echo "Prenume: $prenume"
echo "Grupa: $grupa"
echo "Seria: $seria"
echo "Nota: $nota"
echo
    fi
done
while IFS=, read -u 3 -r id nume prenume grupa seria nota
do
    if [ "$id" -eq "$id3" ]; then
echo "Nume: $nume"
echo "Prenume: $prenume"
echo "Grupa: $grupa"
echo "Seria: $seria"
echo "Nota: $nota"
echo
    fi
done

我应该找到操作数 'nota' 的前 3 个最高值并输出整个 line.I 知道这不是最 space 和时间有效的方法,但我不知道不知道我还能怎么做。 我的 csv 文件看起来有点像这样:

id,nume,prenume,grupa,seria,nota

1,Ion,Andrada,1003,A,8

2,Simion,Raluca,1005,A,7

3,Gheorghita,Mihail,1009,B,5

4,Mihailescu,Georgina,1002,A,6

我已经应用了建议的必要更改,但该程序似乎仍然无法运行。当我执行它时,它不允许我输入要读取的值。我看到你们中的一些人建议用另一种编程语言尝试,但在这种情况下是不可能的。

有什么想法吗?

假设你只需要最高的 3 行,你可以试试这个 headsort

$ head -3 <(sort -t',' -nrk6 input_file)
1,Ion,Andrada,1003,A,8
2,Simion,Raluca,1005,A,7
4,Mihailescu,Georgina,1002,A,6