|
From: | Julio C. Neves |
Subject: | Re: [shell-script-pt] Estudos durante a quarentena |
Date: | Fri, 5 Jun 2020 11:00:46 -0300 |
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.
>
_______________________________________________
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.
[Prev in Thread] | Current Thread | [Next in Thread] |