[BASH] Sacar informacion de un archivo

Iniciado por Delacure Mihawk, 17 Diciembre 2013, 11:55 AM

0 Miembros y 1 Visitante están viendo este tema.

Delacure Mihawk

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

leogtz

Con esto podrías empezar a jugar ...

Código (bash) [Seleccionar]
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.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Delacure Mihawk

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?

leogtz

Depende de qué quieras hacer con ese lenguaje ...
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

jdomgo3

Para imprimir bloques con un inicio y un fin, incluidos estos, lo que yo suelo usar es el comando sed:

Código (BASH) [Seleccionar]
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í:

Código (BASH) [Seleccionar]
sed -n -e "/${IP_DE_INICIO}/,/${IP_DE_FIN}/p" archivo.txt

Pruébalo, yo lo utilizo muchísimo en el trabajo.