Lê do arquivo delimitado por caracteres e atribui-o a variáveis | para email

1

Estou usando o ksh.

Eu preciso ler os dados do arquivo, nas variáveis e depois usá-los para enviar e-mails.

  • O arquivo pode ser delimitado por qualquer caractere menos usado (como | ^ etc.) ou grupo de caracteres.
  • É preciso recuperar e-mails de, e-mail para, cc, bcc, assunto, corpo do arquivo.
  • O arquivo está tendo apenas um registro.
  • Estou colocando spool no arquivo da tabela, assim o delimitador pode ser qualquer caractere, mas menos usado em inglês geral porque caracteres como & * etc. pode estar presente no corpo e que pode retornar valor errado.

Arquivo: ( cc e bcc não estão disponíveis no arquivo, ou seja, estão em branco)

[email protected]|[email protected]|||TEST EMAIL FOR LMS ERROR|Hi <<FIRST_NAME>>, <br><br>

Following errors are generated during migration of LMS data into FIMS application.<br><br><br>
The respective details of Error(s) occured is logged into the attached file.
Regards,<br>
FIMS Web Application<br><br><br>

This is an auto-generated e-mail, please don't reply to this e-mail
Reply to the following person for further details:
[email protected]

Código usando:

while IFS='|' read -r a1 a2 a3 a4 a5 a6
do 
flag1='echo $a1'
flag2='echo $a2'
flag3='echo $a3'
flag4='echo $a4'
flag5='echo $a5'
flag6='echo $a6'
done < $RUNTIME/EMAIL_$System'date +%y%m%d'.csv

Não está definindo as variáveis.

E ao usar o código abaixo: está mostrando uma saída indesejada:

while IFS='|' read -r a1 a2 a3 a4 a5 a6
do 
echo $a1
echo $a2
echo $a3
echo $a4
echo $a5
echo $a6
done < $RUNTIME/EMAIL_$System'date +%y%m%d'.csv

Saída: ( Muitas linhas em branco )

[email protected]
[email protected]


TEST EMAIL FOR LMS ERROR
Hi <<FIRST_NAME>>, <br><br>






Following errors are generated during migration of LMS data into FIMS application.<br><br><br>





The respective details of Error(s) occured is logged into the attached file.





Regards,<br>





FIMS Web Application<br><br><br>











This is an auto-generated e-mail, please don't reply to this e-mail





Reply to the following person for further details:





[email protected]
    
por Sachin 21.01.2015 / 09:08

1 resposta

1

Como você tem todos os campos na primeira linha do arquivo, você pode usar o seguinte código:

IFS='|' read -d ^ -a field < "$RUNTIME/EMAIL_$System'date +%y%m%d'.csv"

Por favor, note que ^ pode ser qualquer símbolo que certamente não deve se encontrar no texto para operá-lo até o fim.

Todos os campos necessários serão armazenados no campo field a partir do elemento 0: campo [0] , campo [1] .. . campo [5] e pode ser verificado por

unset i
for element in 'mail from' 'mail to' cc bcc subject body
do
  echo "$element : ${field[i++]}"
done
    
por 21.01.2015 / 11:16