Optimize and accelerate bash script to transform XML to SQLITE
Take-home message: pipelines in Bash are slow (compared to process substitution); loops in Bash are slow; Bash are slow.

Without a setup script and dummy data to test run it, I don't really understand exactly what your script is trying to achieve at each step, so I can only suggest the following improvements:

Avoid unnecessary pipelines


A lot of your code does cat $1 | grep Telegram | sed -e 's/"/ /g', which can be simplified to sed '/Telegram/!d; s/"/ /g' "$1", so you may want to save the result somewhere and extract from it when needed.
awk '{ print $9 }' | cut -c27-30 can be combined into awk '{print substr($9, 27, 4)}'.
In the command substitution that gets assigned to b, you have sed -e 's/;/ /g' | sed  -e 's/=/ /g' which should really just be sed -e 's/;/ /g' -e 's/=/ /g' or even better just sed 's/[;=]/ /g'. You don't need the -e option if you're not combining expressions.
kk=`wc -l trdata | awk '{ print $1 }'`: kk=`wc -l &lt; trdata` can do the job just fine.
cat grhostfinal | cut -c1-4 &gt; grhostfinal1 is not as efficient as cut -c1-4 &lt; grhostfinal &gt; grhostfinal1
sqlite3 test2.sqlite "select fecha from testxml4;" &gt; data.csv

cat data.csv | sort | uniq &gt; data2.csv


is probably best done entirely in SQL:

sqlite3 test2.sqlite "SELECT DISTINCT fecha FROM testxml4 ORDER BY fecha;" &gt; data.csv



Avoid loops if possible, or optimize for each iteration of the loop


for i in `seq 1 $kk`
do
    echo $a &gt;&gt; rsctype
done


is much slower than

printf "$a\n%.0s" `seq 1 $kk` &gt;&gt; rsctype


for small $kk, and much slower than

yes "$a" | head -n "$kk" &gt;&gt; rsctype


for large $kk. See https://superuser.com/questions/86340/linux-command-to-repeat-a-string-n-times. (Not sure if you actually want to repeat the same strings, but that's what your code does.)
for k in `cat data2.csv`
do
    grep "$k" conjunto.csv &gt;&gt; quitar
done

diff quitar conjunto.csv | grep "&gt;" | sed 's/^&gt; //g' &gt; diferencia.csv


looks like it could be done with just one diff? Maybe (haven't tested it):

diff --changed-group-format='%&gt;' --unchanged-group-format='' data2.csv conjunto.csv\
 &gt; diferencia.csv



Non-performance-related notes


You should wrap your cleanup command in a trap and put it at the beginning of the script so that it will always be executed unless the program is terminated by a SIGKILL:

trap 'rm -f \
rs{host,cname,ctype} \
ttstamp tservice tformat trdata{,2,3,4} \
grhost{,2,final{,{1..4}}} \
data{,2}.csv conjunto.csv \
{a..c} quitar' \
'EXIT'

Please don't rm -r if you're not deleting directories. This is a dangerous command if you're not careful. I used brace expansion to shorten the list of input files I need to type, but I'm not sure if you really need to create that many temporary files.
You don't need to touch the files. Redirection will create the files if they don't exist.


I can probably offer more suggestions if I could try out the script. I'll add to this answer if I think of anything, but this should be enough for now.