Buenas, estoy teniendo problemas al tener que sacar información de un archivo de texto, tiene el siguiente formato:
*
10.138.38.97
192.168.0.11
10.140.28.1
10.140.132.65
10.138.38.97
*
10.138.43.65
192.168.0.11
172.25.6.234
10.140.28.1
10.138.30.33
172.25.10.34
172.25.0.146
172.25.11.161
10.138.43.65
*
10.138.160.161
192.168.0.11
10.138.49.1
172.25.10.34
172.25.0.146
10.138.160.161
*
...
son grupos de IP's, que empiezan y terminan con la misma IP. Mi intencion es coger los "bloques" de IPs y ponerlos dentro de un vector en funcion de la IP que necessite.
Si alguien puede darme un ejemplo de como poner este fragmento dentro de un vector ya me las apaño:
Citar10.138.38.97
192.168.0.11
10.140.28.1
10.140.132.65
10.138.38.97
Graciass
Con esto podrías empezar a jugar ...
let count=-1
declare -a ips
while read line; do
if [[ ${line} =~ ^\*$ ]]; then
((count++));
else
ips=("${ips[@]}" "${line}")
fi
done < <(cat txt.txt)
for i in $(seq 0 $((${#ips[@]}-1)))
do
echo "i=$i - ${ips[$i]}"
done
Si puedes usa mejor un script hecho en otro lenguaje que tenga buenas estructuras de datos.
Gracias Leo por tu ayuda!
Cita de: Leo Gutiérrez. en 18 Diciembre 2013, 01:14 AM
Si puedes usa mejor un script hecho en otro lenguaje que tenga buenas estructuras de datos.
Dentro de nada voy a tener bastante tiempo libre, que lenguaje me recomiendas?
Depende de qué quieras hacer con ese lenguaje ...
Para imprimir bloques con un inicio y un fin, incluidos estos, lo que yo suelo usar es el comando sed:
sed -n -e '/10.138.43.65/,/10.138.43.65/p' archivo.txt
Cuidado con el sed si vas a utilizar variables en lugar de texto a fuego, en ese caso usa comillas dobles en lugar de simples, quedaría así:
sed -n -e "/${IP_DE_INICIO}/,/${IP_DE_FIN}/p" archivo.txt
Pruébalo, yo lo utilizo muchísimo en el trabajo.