Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Delacure Mihawk en 17 Diciembre 2013, 11:55 am



Título: [BASH] Sacar informacion de un archivo
Publicado por: Delacure Mihawk en 17 Diciembre 2013, 11:55 am
Buenas, estoy teniendo problemas al tener que sacar información de un  archivo de texto, tiene el siguiente formato:
Código:
*
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:
Citar
10.138.38.97
192.168.0.11
10.140.28.1
10.140.132.65
10.138.38.97

Graciass


Título: Re: [BASH] Sacar informacion de un archivo
Publicado por: leogtz en 18 Diciembre 2013, 01:14 am
Con esto podrías empezar a jugar ...

Código
  1. let count=-1
  2.  
  3. declare -a ips
  4.  
  5. while read line; do
  6.    if [[ ${line} =~ ^\*$ ]]; then
  7.        ((count++));
  8.    else
  9.        ips=("${ips[@]}" "${line}")
  10.    fi
  11. done < <(cat txt.txt)
  12.  
  13. for i in $(seq 0 $((${#ips[@]}-1)))
  14. do
  15.    echo "i=$i - ${ips[$i]}"
  16. done

Si puedes usa mejor un script hecho en otro lenguaje que tenga buenas estructuras de datos.


Título: Re: [BASH] Sacar informacion de un archivo
Publicado por: Delacure Mihawk en 18 Diciembre 2013, 10:16 am
Gracias Leo por tu ayuda!
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?


Título: Re: [BASH] Sacar informacion de un archivo
Publicado por: leogtz en 18 Diciembre 2013, 20:52 pm
Depende de qué quieras hacer con ese lenguaje ...


Título: Re: [BASH] Sacar informacion de un archivo
Publicado por: jdomgo3 en 21 Enero 2014, 21:48 pm
Para imprimir bloques con un inicio y un fin, incluidos estos, lo que yo suelo usar es el comando sed:

Código
  1. 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
  1. sed -n -e "/${IP_DE_INICIO}/,/${IP_DE_FIN}/p" archivo.txt

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