Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Ayudaaa, scrip para el manejo de cadenas

  • Autor de tema Autor de tema cafc
  • Fecha de inicio Fecha de inicio

cafc

Becerro
Desde
27 Ago 2007
Mensajes
49
Hola comunidad, necesito ayuda desesperada para sacar la informacion de un archivo, la estructura es la siguiente:
hoststatus {
host_name=s0000301
modified_attributes=0
check_command=check-host-alive
check_period=
notification_period=24x7
check_interval=5.000000
retry_interval=1.000000
event_handler=
has_been_checked=1
should_be_scheduled=1
check_execution_time=4.117
check_latency=757.973
check_type=0
current_state=0
last_hard_state=0
last_event_id=0
current_event_id=0
current_problem_id=0
last_problem_id=0
plugin_output=PING OK - Packet loss = 0%, RTA = 10.44 ms
long_plugin_output=
performance_data=rta=10.435000ms;3000.000000;5000.000000;0.000000 pl=0%;80;100;0
last_check=1246039573
next_check=1246039886
check_options=0
}

hoststatus {
host_name=s0000401
modified_attributes=0
check_command=check-host-alive
check_period=
notification_period=24x7
check_interval=5.000000
retry_interval=1.000000
event_handler=
has_been_checked=1
should_be_scheduled=1
check_execution_time=4.151
check_latency=757.079
check_type=0
current_state=0
last_hard_state=0
last_event_id=0
current_event_id=0
current_problem_id=0
last_problem_id=0
plugin_output=PING OK - Packet loss = 0%, RTA = 7.70 ms
long_plugin_output=
performance_data=rta=7.700000ms;3000.000000;5000.000000;0.000000 pl=0%;80;100;0
last_check=1246039583
next_check=1246039896
check_options=0
}

y se repite 99 veces mas, 1 por equipo. Lo que necesito es sacar la info para guardarla en una base de datos, el problema en si es como le hago para separar primero lo que esta entre {} y despues enviar cada una de los valores que esta despues del =.
Gracias por su ayuda, tan solo con que me den la idea de que comandos debo de usar ya lo hago.

Saludos
 
necesitas parsearlo...
independientemente del lenguaje en que lo quieras, un algoritmo seria:
abrir el archivo
leer linea por linea hasta que eof
leer caracter por caracter hasta que caracter sea igual a "="
leer desde caracter = +1 hasta CRLF <-- enter o fin de linea
pasar esos datos leidos a alguna variable
meter variable en base de datos
siguiente linea
 
Gracias KI, me parece excelente pero todavia tengo la bronca del los {} porque tengo que meter 1 registro por cada hostname, como vez ahi?
 
si lees linea por linea, comparas o buscas en esa linea el host_name o el {
y te lo saltas..
no es tan complicado...
 
Muchas gracias KI , hice algo no se si sea lo mas correcto pero quedo. lo comparto con la comunidad por si tiene una duda igual

while read line
do
if [ "$line" == 'hoststatus {' ]
then
inicio=1
fi
if [ "$line" == '}' ]
then
inicio=0
fi
if [ "$inicio" == '1' ]
then
var=$(echo $line | awk -F"=" '{print $1,$2}')
set -- $var
echo $1
echo $2
#codigo para insertar en la base
fi
done < status.dat
 
Volver
Arriba