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

Fala Paulo,
Com certeza não é csh... Conheço duas linguagens cuja atribuição é desse tipo:

$COD_MATERIA = $i_notas.cod_materia

Perl e PHP, provavelmente é uma das duas, mas pode ser outra.

Eu ia responder esse e-mail, só não o tinha feito ainda, pq na próxima semana, eu e Rubens Queiroz estamos abrindo a matrícula de mais uma turma do curso de shell e isso me toma muito tempo.

Mas pelo tamanho das duas soluções apresentadas, pode ser que o George Robinson se convença que o Shell é mais fácil e mais rápido.

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Em 27/01/2020 abriremos uma semana de inscrições
» para uma nova turma. Veja mais detalhes em:

Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.







Em qui., 4 de jun. de 2020 às 22:39, Paulo <phfbettega@gmail.com> escreveu:
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.

reply via email to

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