Voici le script:
Je ne suis pas un pro, je sais que ce n'est pas super optimisé, d'accord.
Je fais ce que je peu. :-/
Voir si ça vous éclairci:
----------------------------------------------------------------
#! /bin/bash
RESUM='Resum_SMS.csv'
#Llista de les variables
set data
set any
set mes
set dia
set hora
set minuts
set segons
set type
set global_title
set origin
set destination
set missatge
numlinies=`wc -l < SMS_tractats | sed 's:[^0-9]*\([0-9]*\):\1:g'`
while [ $numlinies -gt 0 ]
do
# echo "*** LINIES: $numlinies***"
linea=`head -1 SMS_tractats | tail -1`
#echo $linea | grep "[0-9]\{14\},\?,\?,"
#ok=$? #ok<- resultat del comando grep
#if [ $ok == 0 ]; then #SI la linea conte un nou missatge
#J'extrat les differents champs du sms
any=`echo $linea | sed 's:\(^[0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*$:\1:g'`
mes=`echo $linea | sed 's:\(^[0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*$:\2:g'`
dia=`echo $linea | sed 's:\(^[0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*$:\3:g'`
hora=`echo $linea | sed 's:\(^[0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*$:\4:g'`
minuts=`echo $linea | sed 's:\(^[0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*$:\5:g'`
segons=`echo $linea | sed 's:\(^[0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*$:\6:g'`
type=`echo $linea | sed 's:^[0-9]\{14\},\([0-9]\{1\}\),\([0-9]\{1\}\),\([0-9]*\),\([0-9]*\),\([0-9]*\),.*$:\1:g'`
global=`echo $linea | sed 's:^[0-9]\{14\},\([0-9]\{1\}\),\([0-9]\{1\}\),\([0-9]*\),\([0-9]*\),\([0-9]*\),.*$:\3:g'`
origin=`echo $linea | sed 's:^[0-9]\{14\},\([0-9]\{1\}\),\([0-9]\{1\}\),\([0-9]*\),\([0-9]*\),\([0-9]*\),.*$:\4:g'`
destination=`echo $linea | sed 's:^[0-9]\{14\},\([0-9]\{1\}\),\([0-9]\{1\}\),\([0-9]*\),\([0-9]*\),\([0-9]*\),.*$:\5:g'`
udhi=`echo $linea | awk -F\, '{print $7}'`
dcs=`echo $linea | awk -F\, '{print $8}'`
missatge=`echo $linea | sed 's:^[0-9]\{14\},\([0-9]\{1\}\),\([0-9]\{1\}\),\([0-9]*\),\([0-9]*\),\([0-9]*\),\(.*$\):\4,\5,\6:g'`
#Tracto el SMS
#Mirar que TYPE=0, UDHI=0 i DCS=0
if [ $type -eq 0 -a $udhi -eq 0 -a $dcs -eq 0 ];then
echo $global | grep "37630.*"
if [ $? -eq 0 ]; then
#----------------- Andorra -> Estranger--
#BJe cherche les 5 premiers car de l' IMSI
grep ";`echo $destination | sed 's:\(^[0-9]\{5\}\).*$:\1:g'`" $RESUM
if [ $? -eq 0 ]; then
#Guardo el IMSI
IMSIOP=`echo "$destination" | sed 's:\(^[0-9]\{5\}\).*$:\1:g'`
# echo "IMSI: $IMSIOP"
grep ";$IMSIOP"< $RESUM
if [ $? -eq 0 ]; then #Si s'ha trobat l'IMSI continua
#Extreu el contador TOTAL_OUT i el inrecmenta
TO=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $5}'`
TO=`expr $TO + 1`
#Extreu els OUT i els incrementa
O10=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $15}'`
O20=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $16}'`
O30=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $17}'`
O40=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $18}'`
O50=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $19}'`
O1=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $20}'`
O2=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $21}'`
O3=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $22}'`
O10=`expr $O10 + 1`
O20=`expr $O20 + 1`
O30=`expr $O30 + 1`
O40=`expr $O40 + 1`
O50=`expr $O50 + 1`
O1=`expr $O1 + 1`
O2=`expr $O2 + 1`
O3=`expr $O3 + 1`
#Extreu els IN per reinjectarlos talqual
TI=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $4}'`
I10=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $7}'`
I20=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $8}'`
I30=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $9}'`
I40=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $10}'`
I50=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $11}'`
I1=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $12}'`
I2=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $13}'`
I3=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $14}'`
#Extreu el Total_Double
TD=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $6}'`
#Remplaco el TOTAL_OUT i els OUT i reinjecto els IN talqual
cat $RESUM | sed 's:\(^[^;]*\);\('$IMSIOP'\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);:\1;\2;\3;'$TI';'$TO';'$TD';'$I10';'$I20';'$I30';'$I40';'$I50';'$I1';'$I2';'$I3';'$O10';'$O20';'$O30';'$O40';'$O50';'$O1';'$O2';'$O3';:g' > temp
test -f temp
if [ $? -ne 1 ]; then
cat temp > $RESUM
# echo "*** Remplacament efectuat ***"
fi
#-------------------Je regarde si ils sont en double
n=`grep "$missatge" SMS_tractats | wc -l | sed 's:[^0-9]*\([0-9]*\):\1:g'`
# echo "*** REPETIT: $n cops ***"
if [ $n -gt 1 ]; then
# echo "*** Missatge repetit ***"
grep "$missatge" "SMS_tractats" | while read line
do
hora2=`echo $line | sed 's:\(^[0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*$:\4:g'`
minuts2=`echo $line | sed 's:\(^[0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*$:\5:g'`
segons2=`echo $line | sed 's:\(^[0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*$:\6:g'`
if [ `expr $hora2 \* 60 + $minuts2 + $segons` -ne `expr $hora \* 60 + $minuts + $segons2` ];then
#Tracta els sms repetits
# echo "*** Tracto el repetit ***"
if [ $hora2 -lt $hora ];then
INTERVAL=`expr \( 24 - $hora \) \* 60 + $hora2 \* 60 + $minuts2 - 60 + $minuts`
else
INTERVAL=`expr $hora2 \* 60 + $minuts2 - $hora \* 60 - $minuts`
#Si interval continua sent < 0 es que son els segons
if [ $INTERVAL -lt 0 ];then
INTERVAL=1
fi
fi
# echo "Interval: $INTERVAL"
#----------Modif en fonction de l'intervale-------
#----------------------------------------------------
O10=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $15}'`
O20=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $16}'`
O30=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $17}'`
O40=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $18}'`
O50=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $19}'`
O1=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $20}'`
O2=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $21}'`
O3=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $22}'`
#Incremento el O10
O10=`expr $O10 + 1`
if [ $INTERVAL -gt 10 ];then
#Incremento el O20
O20=`expr $O20 + 1`
if [ $INTERVAL -gt 20 ];then
#Incremento el O30
O30=`expr $O30 + 1`
if [ $INTERVAL -gt 30 ];then
#Incremento el O40
O40=`expr $O40 + 1`
if [ $INTERVAL -gt 40 ];then
#Incremento el O50
O50=`expr $O50 + 1`
if [ $INTERVAL -gt 50 ];then
#Incremento el O1H
O1=`expr $O1 + 1`
if [ $INTERVAL -gt 60 ];then
#Incremento el O2H
O2=`expr $O2 + 1`
if [ $INTERVAL -gt 120 ];then
#Incremento el O3H
O3=`expr $O3 + 1`
fi
fi
fi
fi
fi
fi
fi
#Extreu el Total_Double i l'incrementa
TD=`cat $RESUM | grep ";$IMSIOP" | awk -F\; '{print $6}'`
TD=`expr $TD + 1`
#Extreu el contador TOTAL_OUT i el inrecmenta
TO=`expr $TO + 1`
#Remplaco els OUT Doblats i reinjecto els IN talqual
cat $RESUM | sed 's:\(^[^;]*\);\('$IMSIOP'\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);\([0-9]*\);:\1;\2;\3;'$TI';'$TO';'$TD';'$I10';'$I20';'$I30';'$I40';'$I50';'$I1';'$I2';'$I3';'$O10';'$O20';'$O30';'$O40';'$O50';'$O1';'$O2';'$O3';:g' > $RESUM
test -f test
if [ $? -ne 1 ];then
temp > $RESUM
# echo "*** Doblat Contat ***"
fi
fi
done
fi #Fi repetit
fi #Fi test del imsi
fi #Fi destinacio
else
#------------------- Estranger -> Andorra -------------------
#------------------------------------------------------------
echo "***VPas encore traité***"
#Guardo el preffix del operador
fi #Fi estranger
fi #Fi UHDI
# fi #Fi linea nou missatge
#echo "*** Aqui borro els missatge tractat ***"
grep -v "$missatge" SMS_tractats > SMS_temp
cat SMS_temp > SMS_tractats
numlinies=`wc -l < SMS_tractats | sed 's:[^0-9]*\([0-9]*\):\1:g'`
done
Poste le Monday 25 July 2005 15:49:06