1. Ao pessoal que manja de códigos das ostras, um help aqui [RESOLVIDO]
SamLusa XUbuntu
Post recolhido
Enviado em 15/02/2023 - 14:58h
Olá, alguém que possa me ajudar entender como criar um comando básico em shell que leia um padrão como:
Num txt:
dia/mes/ano [ignora o que tem aqui] de hora:min[:segundos] até às hora:min[:segundos]
Eu sei muito bem fazer isso em C ou C++, mas eu quero inovar dessa vez fazer em shell script.
Não quero que façam por mim, quero aprender como fazer em shell.
O que preciso saber é:
1-como ler linha a linha o txt
2-depois de ler a linha, como "separar o joio do trigo?", no caso deixando só a data depois as duas horas? (que as vezes vem com segundos como opcional)
3-depois disso, como que comando eu uso pra parsear pra data e hora? Me dê exemplos que entendo melhor.
4-como com a data e horas, como fazer a diferença em minutos entre as duas horas?
2. Re: Ao pessoal que manja de códigos das ostras, um help aqui
Melhor resposta
msoliverusa Debian
Post recolhido
Enviado em 15/02/2023 - 19:35h
SamL escreveu:
Olá, alguém que possa me ajudar entender como criar um comando básico em shell que leia um padrão como:
Num txt:
dia/mes/ano [ignora o que tem aqui] de hora:min[:segundos] até às hora:min[:segundos]
Eu sei muito bem fazer isso em C ou C++, mas eu quero inovar dessa vez fazer em shell script.
Não quero que façam por mim, quero aprender como fazer em shell.
O que preciso saber é:
1-como ler linha a linha o txt
2-depois de ler a linha, como "separar o joio do trigo?", no caso deixando só a data depois as duas horas? (que as vezes vem com segundos como opcional)
3-depois disso, como que comando eu uso pra parsear pra data e hora? Me dê exemplos que entendo melhor.
4-como com a data e horas, como fazer a diferença em minutos entre as duas horas?
Boa noite SamL.
Para ler linha a linha, é bem simples:
while read line;do
echo $line
done<arquivo.txt
Poste um exemplo do seu arquivo,
de acordo com o conteúdo das linhas, usa se o comando mais elaborado/apropriado....
Por exemplo:
Se seguem um padrão, mesmo número de campos, uso o awk
Se tem variação, uso regex para "pegar" o que preciso . . . .
----------------------------------------------------------------------------------------------------------------
Exemplo: arq sem padrão
cat arq.txt
01/02/2023 ignora o que tem aqui de 08:10:30 até às 18:00:00
02/02/2023 ignora o que tem aqui tambem de 08:20:30 até às 18:30:00
03/02/2023 ignora o que tem aqui tambem novamente de 08:30:30 até às 18:40:00
sed -r 's/[^0-9 :/]+//g;s/[ ]{2,}/ /g' arq.txt
01/02/2023 08:10:30 18:00:00
02/02/2023 08:20:30 18:30:00
03/02/2023 08:30:30 18:40:00
----------------------------------------------------------------------------------------------------------------
arq com padrão
cat arq.txt
01/02/2023 ignora o que tem aqui de 08:10:30 até às 18:00:00
02/02/2023 ignora o que tem aqui de 08:20:30 até às 18:30:00
03/02/2023 ignora o que tem aqui de 08:30:30 até às 18:40:00
Solução em bash
exec 3< <(sed -r 's/[^0-9 :/]+//g;s/[ ]{2,}|[/]/ /g' arq.txt);
while IFS=" " read -a c -u3;do
data=${c[2]}"-"${c[1]}"-"${c[0]};
ent=$(date -d"${data} ${c[3]}" +%s);
sai=$(date -d"${data} ${c[4]}" +%s);
dm=$(((${sai}-${ent})/60));
dh=$((${dm}/60));
printf "Dt:%s Min:%s Hr:%s\n" ${data//-/\/} ${dm} ${dh};
done
exec 3<&-;
#FIM#
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________
3. Re: Ao pessoal que manja de códigos das ostras, um help aqui [RESOLVIDO]
leandropscarduausa Ubuntu
Post recolhido
Enviado em 16/02/2023 - 08:13h
Vc pode usar o comando cut para fazer sucessivas simplificações. Primeiro corta no "de", depois no "até as" e assim por diante.
4. Re: Ao pessoal que manja de códigos das ostras, um help aqui [RESOLVIDO]
SamLusa XUbuntu
Post recolhido
Enviado em 16/02/2023 - 15:35h
Pessoal, desculpa ai a demora, meu sistema quebrou o dpkg e tava até agora tentando resolver aqui. Mais tarde passo aqui pra comentar com calma o que foi sugerido.
5. Re: Ao pessoal que manja de códigos das ostras, um help aqui [RESOLVIDO]
SamLusa XUbuntu
Post recolhido
Enviado em 17/02/2023 - 06:31h
Nossa Marcelo, entendi foi quase nada hahaha
Shell envolve muito símbolos, e não tô acostumado a tanto.
Vou procurar mais tarde um tutorial sobre shell script, sed e awk. No momento tô ocupado mas ainda hoje eu vejo.
Valeu ai a amostra grátis!
6. Re: Ao pessoal que manja de códigos das ostras, um help aqui [RESOLVIDO]
SamLusa XUbuntu
Post recolhido
Enviado em 17/02/2023 - 06:31h
leandropscardua escreveu:
Vc pode usar o comando cut para fazer sucessivas simplificações. Primeiro corta no "de", depois no "até as" e assim por diante.
Opa, vou ver daqui a pouco, com o que o Marcelo mostrou ali tenho uma leve noção de como fazer.
Valeu.
7. Re: Ao pessoal que manja de códigos das ostras, um help aqui [RESOLVIDO]
msoliverusa Debian
Post recolhido
Enviado em 17/02/2023 - 16:12h
SamL escreveu:
Nossa Marcelo, entendi foi quase nada hahaha
Shell envolve muito símbolos, e não tô acostumado a tanto.
Vou procurar mais tarde um tutorial sobre shell script, sed e awk. No momento tô ocupado mas ainda hoje eu vejo.
Valeu ai a amostra grátis! https://nerdki.blogspot.com/ acessa ai, é grátis
Não gostou? O ícone da casinha é serventia do site!
Boa tarde SamL,
Os "sìmbolos" que não acostumo, são os do descritor de arquivos,
sempre recorro para as anotações.
Pra te ajudar, segue uma explicação, Referente a opção "BASH" Linha 1 - Limpa o arquivo, só fica o que interessa para efetuar os calculos
sed -r '
/[^0-9 :/]+//g; => Expressao Regular: O que é diferente de 0-9, espaço e '/', apague
s/[ ]+|[/]/ /g; => Troca espaços e '/' por espaço saída:
01 02 2023 00:10:30 18:00:00
Necessário separar a data, pois tanto o comando date qto o awk,
requerem no formato: YYYY MM DD #COLOCA A saída do comando no "FD3" => FD="descritor de arquivos"
#---------------------------------------------------------------#
Linha 2
Pega linha a linha do fd3 (opção -u do read) e coloca na array 'c' (read -a),
=> veja: read --help|grep '\-[au]'
considerando o IFS=espaço, 5 campos por linha, sendo:
c[0], c[1], c[2], c[3], c[4]
#---------------------------------------------------------------#
Linha 3
Cria a var data=YYYY-MM-DD
#---------------------------------------------------------------#
Linha 4
Cria a var ent=inicio
Resultado em "%s" => "Epoch Unix Timestamp"
#---------------------------------------------------------------#
Linha 5
Cria a var sai=termino
Resultado em %s
#---------------------------------------------------------------#
Linha 6
Cria a var dm=Diferença em minutos
#---------------------------------------------------------------#
Linha 7
var dh=diferença em horas
#---------------------------------------------------------------#
Linha 8
Printa resultados:
${data//-/\/} => Coloca o separador "-" na var data
YYYY-MM-DD
#---------------------------------------------------------------#
Linha 9
encerra o laço while
#---------------------------------------------------------------#
Linha 10
Fecha o fd3
#---------------------------------------------------------------#
#---------------------------------------------------------------# Bash "básico", sem descritor de arquivos e array:
sed -r 's/[^0-9 :/]+//g;s/[ ]{2,}|[/]/ /g' arq.txt > temp.txt;
wait;
while IFS=" " read -r c0 c1 c2 c3 c4;do #Considerando o separador de campos=espaço, gera as variáveis c0..c4
data=${c2}"-"${c1}"-"${c0};
ent=$(date -d"${data} ${c3}" +%s);
sai=$(date -d"${data} ${c4}" +%s);
dm=$(((${sai}-${ent})/60));
dh=$((${dm}/60));
printf "Dt:%s Min:%s Hr:%s\n" ${data//-/\/} ${dm} ${dh};
done<temp.txt
Qquer duvida, é só chamar....
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________
8. Re: Ao pessoal que manja de códigos das ostras, um help aqui [RESOLVIDO]
SamLusa XUbuntu
Post recolhido
Enviado em 19/02/2023 - 11:48h
Voltando.
Obrigado ai pelo esclarecimento, Marcelo, agora entendo mais como é o processo.
Depois do almoço vou fazer uns testes aqui pra ver se consigo fazer o que quero.
Qualquer dúvida, venho por aqui de novo.
Att.: Marcelo Oliver
______________________________________________________________________
10. Re: Ao pessoal que manja de códigos das ostras, um help aqui [RESOLVIDO]
SamLusa XUbuntu
Post recolhido
Enviado em 23/02/2023 - 19:56h
msoliver escreveu:
SamL escreveu: Depois do almoço vou fazer uns testes
.
.
.
E ai SamL, já almoçou? . . . . Rsrsrsrsrsrs
Esse almoço já foi para o mar, se é que me entende hahaha
Desculpa ai a falta de feedback, não esqueci esse tópico. Ficou corrido aqui com outro projeto mas ainda mantenho a ideia de aprender mais sobre shell.
No caso, eu tava vendo sobre sed e pude entender mais sobre teu raciocínio ali no código de exemplo.
Como ainda sou noob com shell, preciso procurar fontes pra novatos, mas tua explicação me deu um norte.
Usamos cookies essenciais para manter o site funcionando e Google Analytics para métricas de audiência. Cookies de anúncios só serão carregados se você permitir.