Fiz uma extração de dados via estrutura WSDL e como retorno recebo uma string em XML, porém estou com alguns problemas pra transformar essa string no padrão de carga que preciso, que seria um arquivo .TXT separado por pipeline (|).
E as transformações que preciso aplicar são:
1. As informações que estão dentro das tags <...> e </...> precisam ser removidas pq elas apenas indicam o início e fim da coluna;
2. As colunas que não tiverem informação precisam ser marcadas normalmente com o separador escolhido o pipeline (|)
Exemplo:
- Na primeira linha da string acima, que coloquei como exemplo não possui informação para a coluna CooperativaSingular, o ideal era que o XML nesse caso destacasse a coluna dessa forma: <CooperativaSingular></CooperativaSingular>, porém na primeira linha simplesmente a tag não aparece, logo pra quê simplificar se eles podem dificultar? Com isso, mesmo não havendo nenhuma informação, na transformação final eu preciso saber que este campo é reservado e isso se aplica para todas as outras colunas que podem ser vazias ou não;
3. As colunas com características de date ou datetime devem estar no formato YYYY-MM-DD;
4. Por fim, deve-se incluir o cabeçalho abaixo: NomeCandidato|CPF|IDInscricao|DataExame|NomeExame|DataProcessamento|SituacaoFinal|GrauObtido|StatusLiberacao|IDModulo|NumeroAcertos|TempoRestante|CooperativaCentral|CooperativaSingular
A ideia é que com as transformações acima feitas as linhas fiquem assim:
NomeCandidato|CPF|IDInscricao|DataExame|NomeExame|DataProcessamento|SituacaoFinal|GrauObtido|StatusLiberacao|IDModulo|NumeroAcertos|TempoRestante|CooperativaCentral|CooperativaSingular
Nome ficticio 1|12345678900|8523690|2009-10-02|Ouvidores|2009-10-05|R|63.00|Resultado Fornecido/Liberado|0|25|2000-01-01|0000 - Instituição A|
Nome ficticio 2|14785236900|9874561|2023-05-12|CPC-S100|2023-05-14|A|77.00|Resultado Fornecido/Liberado|0|46|2000-01-01|9999 - Instituição B|9999.1 - PA - Singular 1
O arquivo tem 50.000 linhas e o que fiz até agora foi essa parte de código:
#!/bin/bash
# Parâmetros externos
caminho="$1"
interface="$2"
# Definir a data atual no formato "YYYYMMDD"
data=$(date -d "$(date +%Y-%m-01) -1 month" "+%Y%m%d")
# Extrair os dados de resposta
echo "Extraindo dados de resposta..."
retorno=$(grep -o '<ObterResultadosInicioResult>.*</ObterResultadosInicioResult>' response.xml | sed -n 's/<ObterResultadosInicioResult>\(.*\)<\/ObterResultadosInicioResult>/\1/p')
# Verificar se existem dados de resultado
hasData=false
if [ -n "${retorno}" ] && [ "${retorno}" != "None" ]; then
hasData=true
fi
# Verificar se há dados
if [ "${hasData}" = true ]; then
echo "Dados encontrados. Gerando arquivo de saída..."
# Definir o cabeçalho
header="NomeCandidato|CPF|NomeExame|DataProcessamento|SituacaoFinal|GrauObtido|StatusLiberacao|IDModulo|NumeroAcertos|TempoRestante|CooperativaCentral|CooperativaSingular|IDInscricao|DataExame"
# Definir o nome do arquivo de saída
arquivo_saida="${caminho}/ARQUIVO_FINAL_${interface}_${data}.TXT"
# Escrever o cabeçalho no arquivo
echo "${header}" > "${arquivo_saida}"
# Substituir <DadosResultado> por vazio e </DadosResultado> por \n
echo "${retorno}" | sed 's|<DadosResultado>||g; s|<Dados>||g; s|</DadosResultado>|\n|g; s|</Dados>||g' >> "${arquivo_saida}"
echo "Arquivo de saída gerado em: ${arquivo_saida}"
else
echo "Nenhum dado encontrado."
fi