Problema con variables shellscript pasar a numero
Publicado por Jose (1 intervención) el 29/08/2006 13:33:18
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:
he probado con variables auxiliares, y varias cosas mas pero sigue sin ir, alguien sabe como arreglarlo?
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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?
Valora esta pregunta


0