 |
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
digitall Shell Level 0

Registrado: 29 Ago 2006 Mensajes: 1
|
Publicado: Mar Ago 29, 2006 12:28 pm Asunto: shellscript ,variables numericas? |
|
|
buenas, pues tengo un problema con un shellscript que estoy haciendo, y el problema es el siguiente:
tengo un archivo llamado arxiufinal.out que contiene lineas las cuales son de este formato:
192.3.4.6 22.5.6.3 1500 294893
132.4.6.7 3.5.6.7 5 20000
133.4.5.6 2.5.6.7 2 333
133.4.5.6 2.5.6.7 2 333
133.4.5.6 2.5.6.7 2 333
1.2.3.4 5.7.8.9 4 63
y bueno lo que tiene que hacer el script desarrollado es comparar la linea actual con la linea anterior, comparar los 2 primeros campos y, en caso de ser iguales, sumar el 3r campo actual con el 3r campo anterior, y sumar el 4rto campo actual con el 4rto anterior y pasarlos a otro archivo. Vaya que lo que tiene que hacer es eliminar repetidos.
todo va bien excepto la suma, que me dice que no es variable numerica o error de sintaxis, y ya no se que hacer, no se si hay alguna manera de que me transforme una variable a numerica, el script en cuestion es este:
if [ -e total.out ]
then
echo borrant total.out
rm total.out
fi
llargaria=$(wc -l arxiufinal.out | awk '{print $1}')
l=1
dns1anterior=$(head -1 arxiufinal.out | tail -1| awk '{print $1}')
dns2anterior=$(head -1 arxiufinal.out | tail -1| awk '{print $2}')
packetsanterior=$(head -1 arxiufinal.out | tail -1| awk '{print $3}')
bytesanterior=$(head -1 arxiufinal.out | tail -1| awk '{print $4}')
bytesactual=0
packetsactual=0
echo $dns1anterior $dns2anterior $packetsanterior $bytesanterior >>total.out
for (( l = 2; l <= $llargaria; l++ ))
do
dns1actual=$(head -$l arxiufinal.out | tail -1| awk '{print $1}')
dns2actual=$(head -$l arxiufinal.out | tail -1| awk '{print $2}')
packetsactual=$(head -$l arxiufinal.out | tail -1| awk '{print $3}')
bytesactual=$(head -$l arxiufinal.out | tail -1| awk '{print $4}')
if [ "$(echo $dns1actual)" = "$(echo $dns1anterior)" ] && [ "$(echo $dns2actual)" = "$(echo $dns2anterior)" ]
then
echo SI
sed -ne ':a' -e '$q;N;2,${P;D;}' -e 'ba' total.out > total2.out
rm total.out
cp total2.out total.out
rm total2.out
packetsanterior= $( expr $packetsactual + $packetsanterior )<------AQUI ESTA EL PROBLEMA
bytesanterior= $( expr $bytesactual + $bytesanterior )<--- AQUI ESTA EL PROBLEMA TAMBIEN
echo "$dns1actual $dns2actual $packetsanterior $bytesanterior" >> total.out
else
echo NO
echo "$dns1actual $dns2actual $packetsactual $bytesactual" >>total.out
fi
dns1anterior=$dns1actual
dns2anterior=$dns2actual
done
he probado con variables auxiliares, y varias cosas mas pero sigue sin ir, alguien sabe como arreglarlo? |
|
| Volver arriba |
|
Kadete Moderador

Registrado: 27 Jul 2006 Mensajes: 252 Ubicación: Buenos Aires
|
Publicado: Mar Ago 29, 2006 3:39 pm Asunto: |
|
|
Nunca he programado en shellscript, pero por ejemplo en python tienes que defnir la variable antes de que aparesca en ejecucion, porque no pruebas definirla arriba de esa sentencia.
Saludos.
kadete |
|
| Volver arriba |
|
|
|
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
|
|