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

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

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


From: George Robinson
Subject: [shell-script-pt] Como fazer um desvio dentro de um laço?
Date: Sat, 1 May 2021 22:51:05 -0300

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

reply via email to

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