Sou muito novo no Bash Scripting, então perdoe minha ignorância. Eu tenho um arquivo de texto com sobrenomes que estou lendo e processando linha por linha uma média de três resultados de teste. Eu preciso produzir as linhas classificadas pelo sobrenome. Aqui está o que eu tenho que calcular a média, com uma variável chamada OUTTOSORT que eu estava tentando passar para classificar antes de ser saída.
#!/bin/bash
FILE=$1
OUTTOSORT=""
while read -r SID FIRST LAST S1 S2 S3
do
SUM=$(expr $S1 + $S2 + $S3)
AVG=$(expr $SUM / 3)
OUTTOSORT = OUTTOSORT + "$AVG [$SID] $LAST, $FIRST \n"
done < "$FILE"
sort < $OUTTOSORT
Quando executado:
engr2-6-52-dhcp:homework6 Matt$ ./Grades.sh
./Grades.sh: line 10: : No such file or directory
./Grades.sh: line 12: $OUTTOSORT: ambiguous redirect
Qualquer sugestão sobre como classificar essas linhas depois de computar a média seria muito útil. Obrigado!
Editar:
Muito obrigado pelas suas respostas! Agora tenho um problema em que não é ordenado pelo campo que eu especificar no entanto:
#!/bin/bash
FILE=$1
COUNT=0
while read -r SID FIRST LAST S1 S2 S3
do
SUM=$(expr $S1 + $S2 + $S3)
AVG=$(expr $SUM / 3)
printf '%d [%d] %s, %s (%d)\n' "$AVG" "$SID" "$LAST" "$FIRST" "$COUNT"
COUNT=$((COUNT + 1))
done < "$FILE" | sort -k 3,3n -k 4,4n -k 2,2g
Saída:
71 [299226663] Camp, Laney (5)
80 [434401929] Camp, Skyler (6)
81 [199144454] Camp, Tracey (4)
82 [123456789] Johnson, Lee (0)
82 [928441032] Forester, Jess (7)
91 [999999999] Smith, Jaime (1)
92 [888111818] Forney, JC (2)
93 [928441032] Forester, Chris (8)
99 [290010111] Lee, Terry (3)
Como você pode ver, ele está classificando por pontuação média em vez de por Sobrenome, Nome, SID. Eu adicionei um contador para confirmar que estava classificando as linhas da saída. Qual erro está causando a classificação para não usar as chaves corretas? Obrigado!
Editar:
Solução para classificar o problema encontrado: digite flags para o último nome e o primeiro nome deve ser d ao invés de n, tornando o comando sort o comando while loop para sort -k 3,3d -k 4,4d -k 2,2g
.