Eu estava escrevendo um script de shell para gerar uma string em um formato específico para que possa ser usado como uma entrada em um dos XML com os quais estou trabalhando.
Dado um arquivo de entrada no formato <attribute field>,<data_type>,<size>
instanceid,varchar,256
sysdate,date
status,number
notes,varchar,4000
created_on,date
Eu quero armazenar em uma variável "check sum" como md5( INSTANCEID || STATUS || NOTES)
. Isso é que eu quero todos os campos de atributos, exceto o campo que tem data como é tipo Ou.
O script que eu escrevi é este
IFS=$'\n'
file=$(cat source.txt)
line_number=$(cat source.txt | wc -l)
checksum="md5( "
for line in $file
do
let line_number=line_number-1
data_field=$(echo $line | cut -f1 -d','| tr "a-z" "A-Z")
data_type=$(echo $line | cut -f2 -d',' | tr "a-z" "A-Z")
if [ $data_type != "DATE" ] && [ $line_number -gt 0 ]
then checksum+="$data_field || "
elif [ $data_type != "DATE" ] && [ $line_number -eq 0 ]
then checksum+=" $data_field "
fi
done
checksum+=")"
echo $checksum
Esse script funciona bem com todos os cenários de entrada, exceto quando a última linha tem um atributo com data como seu tipo.
Nesse caso, a variável tem um valor como md5( INSTANCEID || STATUS || NOTES || )
Eu tentei verificar se a última linha era uma data usando o comando tail
, mas isso falharia novamente se as últimas linhas tivessem o tipo como data.
Como posso eliminar o ||
que aparece no final?