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

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

Re: [shell-script-pt] Como fazer um desvio dentro de um laço?


From: T.Collons
Subject: Re: [shell-script-pt] Como fazer um desvio dentro de um laço?
Date: Sun, 2 May 2021 22:43:17 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1

Hola amigo


Suele ocurrir que cuando ves tu problema en negro sobre blanco las soluciones vienen a tu cabeza solas, espero que a pesar de no dar ningún aporte a tu solicitud te haya a ayudado en resolver tu problema.



El 2/5/21 a les 21:06, George Robinson ha escrit:
¡Hola Collons!

Por cierto, no pude enviar las salidas en cada caso, porque tuve una emergencia familiar aquí y dejé el hilo incompleto. Este script es una pequeña muestra de las partes más importantes. Ya hice ajustes "& page = 1" corriendo un WHILE hasta que se encontraron todas las ocurrencias. Acerca de la salida a un archivo, también tengo esta solución, pero me gustaría entender si esto es posible en el tiempo de ejecución usando WHILE y FOR. Déjame mostrarte qué salidas obtuve usando solo WHILES y filtrando la salida con JQ y lo que obtengo cuando uso un FOR. Muchas gracias por responderme.

¡Saludos desde Brasil!

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Usando WHILE:

#!/bin/bash
> myCompanyOutput.txt; \
\
curl -s --request GET --url "https://api.gupy.io/api/v1/jobs?fields=all&perPage=100&page=1" --header 'Accept: application/json' --header 'Authorization: Bearer 399601ff-b1ba-4cdd-bf14-29ef01b87577' \
\
| jq -r '.results[] | select((.branchName!=null) and .managerName!=null)' | jq -r '"\(.id),\(.name),\(.roleName),\(.departmentName),\(.managerName),\(.branchName)"' ; \
\
totalPages=`curl -s --request GET --url "https://api.gupy.io/api/v1/jobs?&perPage=100&page=1" --header 'Accept: application/json' --header 'Authorization: Bearer 399601ff-b1ba-4cdd-bf14-29ef01b87577' | jq -r '"\(.totalPages)"'`; \
page=1 ; \
\
while [ $page -le $totalPages ] ;\
do \
page=$(($page+1)) ; \
curl -s --request GET --url "https://api.gupy.io/api/v1/jobs?fields=all&perPage=100&page=$page" --header 'Accept: application/json' --header 'Authorization: Bearer 399601ff-b1ba-4cdd-bf14-29ef01b87577' \
| jq -r '.results[] | select ((.branchName!=null) and .managerName!=null)' | jq -r '"\(.id),\(.name),\(.roleName),\(.departmentName),\(.managerName),\(.branchName)"' \
| while IFS=, read jobId jobName jobRoleName departmentName jobManagerName branchName; \
do \
branchName=$(sed -e 's/VEMPRABLU > //g' <<<${branchName} | (tr -d '[:space:]')); \
curl --request GET --url "https://api.gupy.io/api/v1/jobs/$jobId/applications?status=hired&order=id%20asc&fields=all%2C&perPage=100&page=1" --header 'Accept: application/json' --header 'Authorization: $TOKEN' \
|  jq '. | select (.results[].hiringDate!=null)' \
| jq 'def older(days): (now - (strptime("%Y'-'%m'-'%d'T'%H':'%M':'%S'.000'%z") | mktime)) < (days*86400); .results[] | select (.hiringDate | older(1))' \
| jq -r '"'"$jobId"',\(.id),\(.hiringDate),\(.candidate.name),\(.candidate.lastName),\(.candidate.identificationDocument),'"$jobRoleName"','"$departmentName"',\(.candidate.mobileNumber),\(.candidate.email),'"$jobManagerName"','"$branchName"'"' \
| while IFS=, read jobId applicationId hiringDate candidateName candidateLastName candidateIdentificationDocument jobRoleName departmentName candidateMobileNumber candidateEmail jobManagerName branchName; \
do \
candidateMobileNumber=$(tr -d '() -' | sed -e 's/+55//g'<<< ${candidateMobileNumber}); \
jobManagerName=$(sed -e 's/ *$//g' <<<${jobManagerName}); \
hiringDate=$(awk -F "T" '{print $1}' <<< ${hiringDate}); \
curl -s --request GET --url "https://api.gupy.io/api/v1/jobs/$jobId/applications/$applicationId/hiring-information" --header 'Accept: application/json' --header 'Authorization: $TOKEN' \
| jq '. | select ( .salary!=null)' | jq -r '"'"$hiringDate"','"$candidateName"','"$candidateLastName"','"$candidateIdentificationDocument"','"$jobRoleName"','"$departmentName"','"$candidateMobileNumber"','"$candidateEmail"','"$jobManagerName"',\(.salary),'"$branchName"'"' >> myCompanyOutput.txt ; \
done; \
done; \
done; \
echo "" >> myCompanyOutput.txt

Output:

2021-05-03,Thamiris,Lima,13705481762,Assessor Comercial ,Comercial,21990938101,thamiris2souza@gmail.com,Bia Pinho,2100,BLUIP
2021-05-13,Ana Beatriz,Rufino,16600364700,Analista de BI,BI,21986223567,beatriz_hueiss@hotmail.com,Viviane Ferreira,2000,BLUPAGAMENTOS
2021-05-17,Thamyris,Azevedo,14528544750,Analista de Marketing ,Produtos ,21987587313,azevedothamyris@gmail.com,Mariana Teixeira,4000,BLUPAGAMENTOS
2021-05-03,Andrea,Gomes da Silva,02589161760,Assessor de Relacionamento ,Customer Experience,21967654723,deka_rcv@yahoo.com.br,Victor Manarte,2100,BLUIP
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Usando FOR:

curl -s --request GET --url "https://api.gupy.io/api/v1/jobs?fields=all&perPage=100&page=1" --header 'Accept: application/json' --header 'Authorization: Bearer 399601ff-b1ba-4cdd-bf14-29ef01b87577' \
| jq -r '.results[] | select((.branchName!=null) and .managerName!=null)' | jq -r '"\(.id),\(.name),\(.roleName),\(.departmentName),\(.managerName),\(.branchName)"' ; \
totalPages=`curl -s --request GET --url "https://api.gupy.io/api/v1/jobs?&perPage=100&page=1" --header 'Accept: application/json' --header 'Authorization: Bearer 399601ff-b1ba-4cdd-bf14-29ef01b87577' | jq -r '"\(.totalPages)"'`; \
page=1 ; \
while [ $page -lt $totalPages ] ;\
do \
page=$(($page+1)) ; \
curl -s --request GET --url "https://api.gupy.io/api/v1/jobs?fields=all&perPage=100&page=$page" --header 'Accept: application/json' --header 'Authorization: Bearer 399601ff-b1ba-4cdd-bf14-29ef01b87577' \
| jq -r '.results[] | select ((.branchName!=null) and .managerName!=null)' | jq -r '"\(.id),\(.name),\(.roleName),\(.departmentName),\(.managerName),\(.branchName)"' \
| while IFS=, read jobId jobName jobRoleName departmentName jobManagerName branchName; \
\
do \
jobName=$(sed -e 's/ *$//g'<<< ${jobName}); \
jobRoleName=$(sed -e 's/ *$//g'<<< ${jobRoleName}); \
departmentName=$(sed -e 's/ *$//g'<<< ${departmentName}); \
jobManagerName=$(sed -e 's/ *$//g'<<< ${jobManagerName}); \
branchName=$(sed -e 's/VEMPRABLU > //g' <<<${branchName} | (tr -d '[:space:]'));
echo "$jobId | $jobName | $jobRoleName | $departmentName | $jobManagerName | $branchName" ; \
\
getApplication() {
curl --request GET --url "https://api.gupy.io/api/v1/jobs/$jobId/applications?status=hired&order=id%20asc&fields=all%2C&perPage=100&page=1" --header 'Accept: application/json' --header 'Authorization: Bearer 399601ff-b1ba-4cdd-bf14-29ef01b87577' \
| jq '. | select (.results[].hiringDate!=null)' \
| jq 'def older(days): (now - (strptime("%Y'-'%m'-'%d'T'%H':'%M':'%S'.000'%z") | mktime)) < (days*86400); .results[] | select (.hiringDate | older(1))' \
| jq -r '"'"$jobId"',\(.id),\(.hiringDate),\(.candidate.name),\(.candidate.lastName),\(.candidate.identificationDocument),'"$jobRoleName"','"$departmentName"',\(.candidate.mobileNumber),\(.candidate.email),'"$jobManagerName"','"$branchName"'"'
}
getApplicationId() {
curl -s --request GET --url "https://api.gupy.io/api/v1/jobs/$jobId/applications/$applicationId/hiring-information" --header 'Accept: application/json' --header 'Authorization: Bearer 399601ff-b1ba-4cdd-bf14-29ef01b87577' \
| jq '. | select ( .salary!=null)' | jq -r '"'"$hiringDate"','"$candidateName"','"$candidateLastName"','"$candidateIdentificationDocument"','"$jobRoleName"','"$departmentName"','"$candidateMobileNumber"','"$candidateEmail"','"$jobManagerName"',\(.salary),'"$branchName"'"'; \
}
for i in `getApplication`;
do \
echo $i
done; \
done; \
done;

Output:
757519,66380598,2021-05-03T03
00
00.000Z,Thamiris,Lima,13705481762,Assessor Comercial,Comercial,+5521990938101,thamiris2souza@gmail.com,Bia Pinho,BLUIP
757519,66732716,2021-05-03T03
00
00.000Z,Jaqueline,Dias,07333782778,Assessor Comercial,Comercial,+5521998643575,evandronevesmarinho@uol.com.br,Bia Pinho,BLUIP
757519,67265208,2021-05-03T03
00
00.000Z,Brenda,Assumpção,14159324762,Assessor Comercial,Comercial,(21) 98268-3828,brendassumpcao@gmail.com,Bia Pinho,BLUIP
757519,70921936,2021-05-03T03
00
00.000Z,Douglas,Sampaio,10821356747,Assessor Comercial,Comercial,+5521997470349,consultordouglassampaio@gmail.com,Bia Pinho,BLUIP
757519,66380598,2021-05-03T03
00
00.000Z,Thamiris,Lima,13705481762,Assessor Comercial,Comercial,+5521990938101,thamiris2souza@gmail.com,Bia Pinho,BLUIP
757519,66732716,2021-05-03T03
00
00.000Z,Jaqueline,Dias,07333782778,Assessor Comercial,Comercial,+5521998643575,evandronevesmarinho@uol.com.br,Bia Pinho,BLUIP
757519,67265208,2021-05-03T03
00
00.000Z,Brenda,Assumpção,14159324762,Assessor Comercial,Comercial,(21) 98268-3828,brendassumpcao@gmail.com,Bia Pinho,BLUIP
757519,70921936,2021-05-03T03
00
00.000Z,Douglas,Sampaio,10821356747,Assessor Comercial,Comercial,+5521997470349,consultordouglassampaio@gmail.com,Bia Pinho,BLUIP
757519,66380598,2021-05-03T03
00
00.000Z,Thamiris,Lima,13705481762,Assessor Comercial,Comercial,+5521990938101,thamiris2souza@gmail.com,Bia Pinho,BLUIP
757519,66732716,2021-05-03T03
00
00.000Z,Jaqueline,Dias,07333782778,Assessor Comercial,Comercial,+5521998643575,evandronevesmarinho@uol.com.br,Bia Pinho,BLUIP
757519,67265208,2021-05-03T03
00
00.000Z,Brenda,Assumpção,14159324762,Assessor Comercial,Comercial,(21) 98268-3828,brendassumpcao@gmail.com,Bia Pinho,BLUIP
757519,70921936,2021-05-03T03
00
00.000Z,Douglas,Sampaio,10821356747,Assessor Comercial,Comercial,+5521997470349,consultordouglassampaio@gmail.com,Bia Pinho,BLUIP
757519,66380598,2021-05-03T03
00
00.000Z,Thamiris,Lima,13705481762,Assessor Comercial,Comercial,+5521990938101,thamiris2souza@gmail.com,Bia Pinho,BLUIP
757519,66732716,2021-05-03T03
00
00.000Z,Jaqueline,Dias,07333782778,Assessor Comercial,Comercial,+5521998643575,evandronevesmarinho@uol.com.br,Bia Pinho,BLUIP
757519,67265208,2021-05-03T03
00
00.000Z,Brenda,Assumpção,14159324762,Assessor Comercial,Comercial,(21) 98268-3828,brendassumpcao@gmail.com,Bia Pinho,BLUIP
757519,70921936,2021-05-03T03
00
00.000Z,Douglas,Sampaio,10821356747,Assessor Comercial,Comercial,+5521997470349,consultordouglassampaio@gmail.com,Bia Pinho,BLUIP
795747,69258298,2021-05-13T03
00
00.000Z,Ana Beatriz,Rufino,16600364700,Analista de BI,BI,+5521986223567,beatriz_hueiss@hotmail.com,Viviane Ferreira,BLUPAGAMENTOS

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Notas:

Me acabo de dar cuenta de que es posible trabajar con otra variable llamada $ applicationId en
getApplicationId() {
curl -s --request GET --url "https://api.gupy.io/api/v1/jobs/$jobId/applications/$applicationId/hiring-information" --header 'Accept: application/json' --header 'Authorization: $TOKEN' \
| jq '. | select ( .salary!=null)' | jq -r '"'"$hiringDate"','"$candidateName"','"$candidateLastName"','"$candidateIdentificationDocument"','"$jobRoleName"','"$departmentName"','"$candidateMobileNumber"','"$candidateEmail"','"$jobManagerName"',\(.salary),'"$branchName"'"'; \
}
Creo que puedo usar un nuevo FOR dentro de un FOR para lograr lo que necesito.

Perdón por mi demora en responder este hilo, pero acabo de regresar a casa y tuve que cocinar el almuerzo.

Saludos desde Rio de Janeiro!

Em dom., 2 de mai. de 2021 às 11:31, T.Collons <t.collons@gmail.com> escreveu:

Hola, espero entiendas mi repuesta en castellano.


No soy mas que un aprendiz de SHELL-SCRIPT, pero creo que a modo de ejemplo deberías enviar un fichero o enlace con datos, no validos claro, para poder hacer alguna comprobación.

Tampoco sabemos como esta organizada esa base de datos con la que enlazas pero "&page=1" me da que delimitas mucho las cosas.

No me lo tomes a mal solo intento ayudar.



El 2/5/21 a les 3:51, George Robinson ha escrit:
Boa noite lista,

Eu gostaria de solicitar ajudar com um problema que descobri recentemente enquanto escrevia um script para extrair dados de uma api e registrar um arquivo txt para dar carga em outro sistema ja com os dados formatados.

À princípio tudo ia bem até que eu descobri algo muito interessante (e para o qual não consigo sair).

Eu tenho uma api onde eu posso consultar os dados que preciso para fazer a saída em um txt. Por motivos de segurança vou deixar a URL sem o token de acesso, mas o raciocínio não será prejudicado (para os que puderem ajudar).
Vamos ao problema :P

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#1ª Parte (Chamada da URL via cURL + filtragem de dados para saída JSON)
\
curl -s --request GET --url "https://api.gupy.io/api/v1/jobs?fields=all&perPage=100&page=1" --header 'Accept: application/json' --header 'Authorization: $TOKEN' \
| jq -r '.results[] | select((.branchName!=null) and .managerName!=null)' | jq -r '"\(.id),\(.name),\(.roleName),\(.departmentName),\(.managerName),\(.branchName)"' \
| while IFS=, read jobId jobName jobRoleName departmentName jobManagerName branchName; \
do \
\
#2ª Parte (para cada jobId encontrado no while acima e que tenha um novo contratado já com data de admissao definida, extrai-se os dados relevantes do candidato, separando por virgulas)
\
curl --request GET --url "https://api.gupy.io/api/v1/jobs/$jobId/applications?status=hired&order=id%20asc&fields=all%2C&perPage=100&page=1" --header 'Accept: application/json' --header 'Authorization: $TOKEN' \
|  jq '. | select (.results[].hiringDate!=null)' \
| jq 'def older(days): (now - (strptime("%Y'-'%m'-'%d'T'%H':'%M':'%S'.000'%z") | mktime)) < (days*86400); .results[] | select (.hiringDate | older(1))' \ | jq -r '"'"$jobId"',\(.id),\(.hiringDate),\(.candidate.name),\(.candidate.lastName),\(.candidate.identificationDocument),'"$jobRoleName"','"$departmentName"',\(.candidate.mobileNumber),\(.candidate.email),'"$jobManagerName"','"$branchName"'"' \
| while IFS=, read jobId applicationId hiringDate candidateName candidateLastName candidateIdentificationDocument jobRoleName departmentName candidateMobileNumber candidateEmail jobManagerName branchName; \
do \
echo "$hiringDate,$candidateName,$candidateLastName,$candidateIdentificationDocument,$jobRoleName,$departmentName,$candidateMobileNumber,$candidateEmail,$jobManagerName,$branchName";
done; \
done;

O que de fato acontece é que se eu tenho uma determinado job com mais de um candidato contratado, apenas a primeira posição é mostrada.
Eu tentei fazer um FOR dentro desse último while mas o resultado foi uma repetição de um número de registros. Ex: 4 contratados de uma vaga aparecendo 4x cada.

Como controlar isso?
--
George Robinson

_______________________________________________
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.
--



Pere

t.collons@gmail.com




------------------------------------

AVIS LEGAL

Nota de confidencialitat: Aquest missatge podria contenir missatges d'empresa i altre informació confidencial tutelada per les lleis de Europea i altres estats, Si Vostè el rep per error o sense ser una de les persones esmenades a la capçalera, haurà de destruir-lo sense copiar-lo ni revelar-l'ho o qualsevol altre acció relacionada amb el contingut del missatge i notificar-ho per correu electrònic a l'emissor del missatge.

Les persones o entitats que incompleixin els deures de confidencialitat podran ésser perseguides davant dels Tribunals de Justícia sota l'empar de la legislació civil, penal i administrativa nacional i internacional.  

Gracies per la seva cooperació.

------------------------------------

LEGAL NOTICE

Confidentiality notice: This mail may include business and other confidential information protected under the laws of and other territories. if you are not one of the intended recipients of the message, you are legally obliged to delete the message content. Furthermore, you are kindly requested to report immediately the incident to the sender.

Breach of confidentiality duties is a serious criminal offence in and other territories. Offenders shall be legally prosecuted worldwide. 

Thank you for your cooperation.



_______________________________________________
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.


--
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.
--



Pere

t.collons@gmail.com




------------------------------------

AVIS LEGAL

Nota de confidencialitat: Aquest missatge podria contenir missatges d'empresa i altre informació confidencial tutelada per les lleis de Europea i altres estats, Si Vostè el rep per error o sense ser una de les persones esmenades a la capçalera, haurà de destruir-lo sense copiar-lo ni revelar-l'ho o qualsevol altre acció relacionada amb el contingut del missatge i notificar-ho per correu electrònic a l'emissor del missatge.

Les persones o entitats que incompleixin els deures de confidencialitat podran ésser perseguides davant dels Tribunals de Justícia sota l'empar de la legislació civil, penal i administrativa nacional i internacional.  

Gracies per la seva cooperació.

------------------------------------

LEGAL NOTICE

Confidentiality notice: This mail may include business and other confidential information protected under the laws of and other territories. if you are not one of the intended recipients of the message, you are legally obliged to delete the message content. Furthermore, you are kindly requested to report immediately the incident to the sender.

Breach of confidentiality duties is a serious criminal offence in and other territories. Offenders shall be legally prosecuted worldwide. 

Thank you for your cooperation.




reply via email to

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