shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script-pt] Estudos durante a quarentena


From: Paulo
Subject: Re: [shell-script-pt] Estudos durante a quarentena
Date: Thu, 4 Jun 2020 22:39:05 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.1

Olá George, o script é csh? Não tenho familiaridade, mas pela saída talvez
seja o caso de imprimir os nomes dos alunos em outro ponto do script.
Fiz esse script em bash com ajuda de sed, grep, bc.
Acho que a lógica é mais ou menos a mesma, um loop pegando o nome
dos alunos, outro loop dentro pegando as notas e outro para imprimir
as matérias e médias.

while IFS=, read cod_aluno nome; do

while IFS=, read cod_materia cod_aluno_notas notas; do
[ "$cod_aluno_notas" -eq "$cod_aluno" ] && media[$cod_materia]=$(echo 
"scale=3;(${notas//,/+})/4"|bc)
done <<<"$(sed 1d notas.csv)"

echo $cod_aluno $nome

for i in ${!media[@]}; do
printf "%-15s%s\n" "$(grep $i materias.csv|cut -d, -f2)" ${media[i]}
done

done <<<"$(sed 1d estudantes.csv)"

001 Carlos Eduardo Barbosa Oliveira
Matemática    5.350
Português     7.050
Geografia      5.275
História      4.187
Física        3.425
002 Maria Eduarda Barbosa Oliveira
Matemática    7.125
Português     6.550
Geografia      6.250
História      5.725
Física        5.150

É possível reunir todos os três arquivos csv em um único? Acho que dessa maneira
o script ficaria mais fácil, até mesmo fazer um script em awk também.
Abraços Paulo

On 03/06/2020 23:28, George Robinson wrote:
Caros,

Eu e meu enteado resolvemos estudar juntos durante a quarentena, e estamos evoluindo bem em nossos conceitos. Hoje, depois de finalizarmos estudos sobre lógica de programação e algoritmos, resolvemos nos envolver na montagem de um código para lermos notas lançadas de alunos de um arquivo. O código evoluiu como deveria, até que surgiu a questão. Não somos familiarizados ainda com o conceito de looping, do.. while, for, foreach.

Pra resumir a questão, vou direto ao ponto. Fizemos um script grande, porém cansativo que dá muita margem ao erro humano, então partimos para algo mais sofisticado e "automatizado", consultando um arquivo .csv e depois lançar as notas, tirar a média e retornando com as condições.

O código abaixo está parcialmente escrito, pois ele não retorna ainda os valores de que necessito para concluir o código:

-----------------------------------------------------------------------------------------------------
Arquivo  estudantes.csv

cod_aluno,nome_aluno
001,Carlos Eduardo Barbosa Oliveira
002,Maria Eduarda Barbosa Oliveira
-----------------------------------------------------------------------------------------------------
Arquivo materias.csv

cod_materia,nome_materia
01,Matemática
02,Português
03,Geografia
04,História
05,Física
-----------------------------------------------------------------------------------------------------
Arquivo notas.csv

cod_materia,cod_aluno,1_bi,2_bi,3_bi,4_bi
01,001,6.7,5.0,3.2,6.5
02,001,8.5,7.0,5.6,7.10
03,001,7.4,5.0,4.2,4.5
04,001,5.0,6.5,1.75,3.5
05,001,4.2,5.0,2.25,2.25
01,002,7.6,7.5,6.9,6.5
02,002,5.8,6.8,6.5,7.10
03,002,4.8,8.5,7.2,4.5
04,002,6.0,5.9,5,7,5,3
05,002,2.4,8.5,5.2,4.5
-----------------------------------------------------------------------------------------------------
notas.sh

$MATERIA = ".\Downloads\materias.csv"
$LERMATERIA = import-csv $MATERIA

$ESTUDANTES =  ".\Downloads\estudantes.csv"
$LERESTUDANTES = import-csv $ESTUDANTES

$NOTAS = ".\Downloads\notas.csv"
$LERNOTAS = import-csv $NOTAS

$REPROVA = 0

foreach ($i_materia in $LERMATERIA) {
         [int]$COD_MATERIA = $i_materia.cod_materia
         [string]$NOME_MATERIA = $i_materia.nome_materia

         #Write-Host "`r`n$COD_MATERIA $NOME_MATERIA"':'

         foreach ($i_estudante in $LERESTUDANTES) {
         [int]$COD_ALUNO = $i_estudante.cod_aluno
         [string]$NOME_ALUNO = $i_estudante.nome_aluno

         #Write-Host $COD_ALUNO $NOME_ALUNO

foreach ($i_notas in $LERNOTAS) {
         $COD_MATERIA = $i_notas.cod_materia
         $COD_ALUNO = $i_notas.cod_aluno
         $B1 = $i_notas.'1_bi'
         $B2 = $i_notas.'2_bi'
         $B3 = $i_notas.'3_bi'
         $B4 = $i_notas.'4_bi'

         $MEDIA = ([INT]$B1+[INT]$B2+[INT]$B3+[INT]$B4)/4

         Write-Host 'Nota '$NOME_MATERIA': ' $NOME_ALUNO' :' $MEDIA
           }
      }
}
-----------------------------------------------------------------------------------------------------
SAIDA:

Nota  Matemática:  Carlos Eduardo Barbosa Oliveira : 5,25
Nota  Matemática:  Carlos Eduardo Barbosa Oliveira : 7
Nota  Matemática:  Carlos Eduardo Barbosa Oliveira : 5
Nota  Matemática:  Carlos Eduardo Barbosa Oliveira : 4,25
Nota  Matemática:  Carlos Eduardo Barbosa Oliveira : 3,25
Nota  Matemática:  Carlos Eduardo Barbosa Oliveira : 7,25
Nota  Matemática:  Carlos Eduardo Barbosa Oliveira : 6,5
Nota  Matemática:  Carlos Eduardo Barbosa Oliveira : 6
Nota  Matemática:  Carlos Eduardo Barbosa Oliveira : 6
Nota  Matemática:  Carlos Eduardo Barbosa Oliveira : 4,75
Nota  Matemática:  Maria Eduarda Barbosa Oliveira : 5,25
Nota  Matemática:  Maria Eduarda Barbosa Oliveira : 7
Nota  Matemática:  Maria Eduarda Barbosa Oliveira : 5
Nota  Matemática:  Maria Eduarda Barbosa Oliveira : 4,25
Nota  Matemática:  Maria Eduarda Barbosa Oliveira : 3,25
Nota  Matemática:  Maria Eduarda Barbosa Oliveira : 7,25
Nota  Matemática:  Maria Eduarda Barbosa Oliveira : 6,5
Nota  Matemática:  Maria Eduarda Barbosa Oliveira : 6
Nota  Matemática:  Maria Eduarda Barbosa Oliveira : 6
Nota  Matemática:  Maria Eduarda Barbosa Oliveira : 4,75
Nota  Português:  Carlos Eduardo Barbosa Oliveira : 5,25
Nota  Português:  Carlos Eduardo Barbosa Oliveira : 7
Nota  Português:  Carlos Eduardo Barbosa Oliveira : 5
Nota  Português:  Carlos Eduardo Barbosa Oliveira : 4,25
Nota  Português:  Carlos Eduardo Barbosa Oliveira : 3,25
Nota  Português:  Carlos Eduardo Barbosa Oliveira : 7,25
Nota  Português:  Carlos Eduardo Barbosa Oliveira : 6,5
Nota  Português:  Carlos Eduardo Barbosa Oliveira : 6
Nota  Português:  Carlos Eduardo Barbosa Oliveira : 6
Nota  Português:  Carlos Eduardo Barbosa Oliveira : 4,75
Nota  Português:  Maria Eduarda Barbosa Oliveira : 5,25
Nota  Português:  Maria Eduarda Barbosa Oliveira : 7
Nota  Português:  Maria Eduarda Barbosa Oliveira : 5
Nota  Português:  Maria Eduarda Barbosa Oliveira : 4,25
Nota  Português:  Maria Eduarda Barbosa Oliveira : 3,25
Nota  Português:  Maria Eduarda Barbosa Oliveira : 7,25
Nota  Português:  Maria Eduarda Barbosa Oliveira : 6,5
Nota  Português:  Maria Eduarda Barbosa Oliveira : 6
Nota  Português:  Maria Eduarda Barbosa Oliveira : 6
Nota  Português:  Maria Eduarda Barbosa Oliveira : 4,75
Nota  Geografia:  Carlos Eduardo Barbosa Oliveira : 5,25
Nota  Geografia:  Carlos Eduardo Barbosa Oliveira : 7
Nota  Geografia:  Carlos Eduardo Barbosa Oliveira : 5
Nota  Geografia:  Carlos Eduardo Barbosa Oliveira : 4,25
Nota  Geografia:  Carlos Eduardo Barbosa Oliveira : 3,25
Nota  Geografia:  Carlos Eduardo Barbosa Oliveira : 7,25
Nota  Geografia:  Carlos Eduardo Barbosa Oliveira : 6,5
Nota  Geografia:  Carlos Eduardo Barbosa Oliveira : 6
Nota  Geografia:  Carlos Eduardo Barbosa Oliveira : 6
Nota  Geografia:  Carlos Eduardo Barbosa Oliveira : 4,75
Nota  Geografia:  Maria Eduarda Barbosa Oliveira : 5,25
Nota  Geografia:  Maria Eduarda Barbosa Oliveira : 7
Nota  Geografia:  Maria Eduarda Barbosa Oliveira : 5
Nota  Geografia:  Maria Eduarda Barbosa Oliveira : 4,25
Nota  Geografia:  Maria Eduarda Barbosa Oliveira : 3,25
Nota  Geografia:  Maria Eduarda Barbosa Oliveira : 7,25
Nota  Geografia:  Maria Eduarda Barbosa Oliveira : 6,5
Nota  Geografia:  Maria Eduarda Barbosa Oliveira : 6
Nota  Geografia:  Maria Eduarda Barbosa Oliveira : 6
Nota  Geografia:  Maria Eduarda Barbosa Oliveira : 4,75
Nota  História:  Carlos Eduardo Barbosa Oliveira : 5,25
Nota  História:  Carlos Eduardo Barbosa Oliveira : 7
Nota  História:  Carlos Eduardo Barbosa Oliveira : 5
Nota  História:  Carlos Eduardo Barbosa Oliveira : 4,25
Nota  História:  Carlos Eduardo Barbosa Oliveira : 3,25
Nota  História:  Carlos Eduardo Barbosa Oliveira : 7,25
Nota  História:  Carlos Eduardo Barbosa Oliveira : 6,5
Nota  História:  Carlos Eduardo Barbosa Oliveira : 6
Nota  História:  Carlos Eduardo Barbosa Oliveira : 6
Nota  História:  Carlos Eduardo Barbosa Oliveira : 4,75
Nota  História:  Maria Eduarda Barbosa Oliveira : 5,25
Nota  História:  Maria Eduarda Barbosa Oliveira : 7
Nota  História:  Maria Eduarda Barbosa Oliveira : 5
Nota  História:  Maria Eduarda Barbosa Oliveira : 4,25
Nota  História:  Maria Eduarda Barbosa Oliveira : 3,25
Nota  História:  Maria Eduarda Barbosa Oliveira : 7,25
Nota  História:  Maria Eduarda Barbosa Oliveira : 6,5
Nota  História:  Maria Eduarda Barbosa Oliveira : 6
Nota  História:  Maria Eduarda Barbosa Oliveira : 6
Nota  História:  Maria Eduarda Barbosa Oliveira : 4,75
Nota  Física:  Carlos Eduardo Barbosa Oliveira : 5,25
Nota  Física:  Carlos Eduardo Barbosa Oliveira : 7
Nota  Física:  Carlos Eduardo Barbosa Oliveira : 5
Nota  Física:  Carlos Eduardo Barbosa Oliveira : 4,25
Nota  Física:  Carlos Eduardo Barbosa Oliveira : 3,25
Nota  Física:  Carlos Eduardo Barbosa Oliveira : 7,25
Nota  Física:  Carlos Eduardo Barbosa Oliveira : 6,5
Nota  Física:  Carlos Eduardo Barbosa Oliveira : 6
Nota  Física:  Carlos Eduardo Barbosa Oliveira : 6
Nota  Física:  Carlos Eduardo Barbosa Oliveira : 4,75
Nota  Física:  Maria Eduarda Barbosa Oliveira : 5,25
Nota  Física:  Maria Eduarda Barbosa Oliveira : 7
Nota  Física:  Maria Eduarda Barbosa Oliveira : 5
Nota  Física:  Maria Eduarda Barbosa Oliveira : 4,25
Nota  Física:  Maria Eduarda Barbosa Oliveira : 3,25
Nota  Física:  Maria Eduarda Barbosa Oliveira : 7,25
Nota  Física:  Maria Eduarda Barbosa Oliveira : 6,5
Nota  Física:  Maria Eduarda Barbosa Oliveira : 6
Nota  Física:  Maria Eduarda Barbosa Oliveira : 6
Nota  Física:  Maria Eduarda Barbosa Oliveira : 4,75
---------------------------------------------------------------------------------------------------------
Gostaria de entender qual a sub-rotina eu deveria inserir no código para que cada ALUNO fosse tratado individualmente.

--
George Robinson
Analista de Suporte
Tel: +55 (21) 97449-8138

_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: shell-script-pt@nongnu.org
Para se inscrever ou desinscrever acesse: 
https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse 
https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize 
somente esta.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]