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: Fri, 5 Jun 2020 11:38:46 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.1

Valeu Mestre Julio, então pode ser que o script rode no navegador.
Qual a outra solução? Não chegou aqui pra mim, gostaria de ver :).
O meu script tem um problema que é o grep, ele roda muitas vezes
dentro do loop, com arquivos grandes deve comprometer o tempo de execução.
Não fiquei contente com três loops também rs mas foi a lógica que eu
comecei usando daí fui em frente.
Abraços Paulo

On 05/06/2020 11:00, Julio C. Neves wrote:
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:*
*» ****https://educacao.dicas-l.com.br/shell-linux*
*
*
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
*
*






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