Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 6 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mié Jun 16, 2010 9:23 pm
Mensajes: 355
Ubicación: Venezuela

Nota Publicado: Jue Sep 08, 2011 11:56 pm 
Arriba  
Buenas,

Estuve varias horas tratando de lograr un script de bash más conciso que esto:

Código:
#!/bin/bash
clear
salida="Extent: (628262.654156, 584293.869679) - (723651.956960, 685190.120639)" #salida con grep de un comando de la librería GDAL/OGR
salida2=`echo ${salida//(/''}`
salida3=`echo ${salida2//)/''}`
salida4=`echo ${salida3//,/''}`
salida5=`echo ${salida4//-/''}`
salida6=`echo ${salida5//E/''}`
salida7=`echo ${salida6//x/''}`
salida8=`echo ${salida7//t/''}`
salida9=`echo ${salida8//e/''}`
salida10=`echo ${salida9//n/''}`
salida11=`echo ${salida10//:/''}`

echo $salida11


pero no pude. Al final hace lo que quiero, es decir, produce esta salida (requerida como entrada para otro comando de la librería GDAL/OGR):

Código:
628262.654156 584293.869679 723651.956960 685190.120639


pero, es posible hacerlo más conciso?

Saludos

_________________
[Reglamento del foro] [Blog]


Última edición por cerenkov el Vie Sep 09, 2011 11:08 am, editado 2 veces en total
 Perfil Email  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Sab Oct 09, 2004 11:00 pm
Mensajes: 1299

Nota Publicado: Vie Sep 09, 2011 1:17 am 
Arriba  
No me meto a hacerlo tal como lo expresas, porque sospecho que hay que jugar un poco con los caracteres especiales (habría que escapar los paréntesis, no sé qué pasará con los puntos, etc). Es decir, es probable que debas escribir en el array algo así: \(628262\.654156\, 584293.869679\)

O tal vez no. Diviértete.

En cualquier caso, lo que intentas se consigue con arrays (busca arrays en bash, en Google). Ejemplo:

Código:
#!/bin/sh
declare -a salida=(elemento1 elemento2 elemento3 elemento4 elemento5 elemento6 elemento7 elemento8) # (hasta se podría hacer un for para escribir los elementos).
for i in `seq 0 7`; do echo  "salida$i=${salida[$i]}"; done


Edit: bueno, pero pasé por alto esto: "salida con grep de un comando de la librería GDAL/OGR". Lo que exigiría otro bucle para quitar caracteres no queridos y pasar cada elemento a un array (se puede, si se sabe exactamente cómo será siempre la salida). El script sería más elegante, claro, pero no más simple.


Última edición por neurus el Vie Sep 09, 2011 1:20 am, editado 1 vez en total
 Perfil  

Desconectado
Forista Mayor
Forista Mayor

Registrado: Vie Ago 24, 2007 11:00 pm
Mensajes: 794
Ubicación: Galicia - España

Nota Publicado: Vie Sep 09, 2011 1:20 am 
Arriba  
Esto debería funcionar:
Código:
salida2 = `echo $salida | egrep -o '[0-9]*\.?[0-9]*'`

_________________
Mi blog: Conocimiento Abierto

 Perfil WWW  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mié Jun 16, 2010 9:23 pm
Mensajes: 355
Ubicación: Venezuela

Nota Publicado: Vie Sep 09, 2011 8:11 am 
Arriba  
Gracias neurus y fpuga por su amabilidad en contestar. Ya había pensado en algo parecido a lo que propone neurus pero lo había descartado por complejo en bash (mas no así en python del que estoy tomando un curso para novatos pero después tendría que ver como "llamaba" el script *.py desde bash y allí soy mas novato). Lo de fpuga lo voy a probar después que escriba este post.

Por otra parte, tenía un buen rato leyendo manuales de programación en bash y probando, por ensayo y error, muchas cosas hasta que encontré esa que funcionó. No de manera muy elegante para mi gusto pero funcionó. Este tema lo abrí de madrugada, muy cansado, después de hallar esa respuesta. Hoy, al levantarme, me llegó por fin un insight y comprendí verdaderamente lo que hacen esa serie de símbolos en el script (no soy muy ducho en esto de bash).

Re escribí mi script más conciso (elimina 5 líneas de programación) y funcionó:

Código:
#!/bin/bash
clear
salida1="Extent: (628262.654156, 584293.869679) - (723651.956960, 685190.120639)"
salida2=`echo ${salida1/Extent: (/''}`
salida3=`echo ${salida2//(/''}`
salida4=`echo ${salida3//,/''}`
salida5=`echo ${salida4//-/''}`
salida6=`echo ${salida5//)/''}`
echo $salida6


Muchas gracias nuevamente. Ahora pruebo lo de neurus y fpuga y vuelvo a postear.

Saludos

Editado -- Vie Sep 09, 2011 8:16 am --

La solución de fpuga funciona :D :D :D :D :D :D :D :D

Esa es la elegante. Sin embargo, hice algunas modificaciones después de leerme el manual de grep (egrep está en desuso) y comprender que hace.

Código:
#!/bin/bash
clear
salida="Extent: (628262.654156, 584293.869679) - (723651.956960, 685190.120639)"
salida2=`echo $salida1 | grep -oE '[0-9.]*'`
echo $salida2


Saludos a ambos y en especial a fpuga. Créditos aquí:

Obtener información de capas vectoriales con librería GDAL/OGR

_________________
[Reglamento del foro] [Blog]

 Perfil Email  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Sab Oct 09, 2004 11:00 pm
Mensajes: 1299

Nota Publicado: Vie Sep 09, 2011 10:19 am 
Arriba  
Por si algún novato ingresa aquí buscando la solución, dejo sentado que yo había entendido muy mal lo que debía hacer el script.

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mié Jun 16, 2010 9:23 pm
Mensajes: 355
Ubicación: Venezuela

Nota Publicado: Vie Sep 09, 2011 11:05 am 
Arriba  
neurus escribió:
Por si algún novato ingresa aquí buscando la solución, dejo sentado que yo había entendido muy mal lo que debía hacer el script.


Gracias nuevamente por la atención. Lo que vale resaltar es lo poderoso que es este lenguaje de script y a que aprendí algo que había descuidado por largo tiempo. Sin embargo, la necesidad obliga.

Saludos

_________________
[Reglamento del foro] [Blog]

 Perfil Email  
Mostrar mensajes previos:  Ordenar por  
 [ 6 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO