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 Nuevo
Forista Nuevo

Registrado: Mar Feb 01, 2011 6:50 am
Mensajes: 3

Nota Publicado: Mar Feb 01, 2011 6:52 am 
Arriba  
Hola vereis, me han pedido que realiza este guión shell, pero la verdad es que no soy capaz... si fuese en c++ o c podría sin problemas, pero no entiendo la sintaxis shell. Por favor, si me podeis echar una pequeña mano os lo agradecería!

Realizar un guión que dado un fichero en el que figuran una serie de números
separados por blancos y otro número dado como parámetro, obtenga todos los
números positivos y menores que dicho parámetro, que no están en el fichero.

Órdenes:
Sort
Uniq
Comm

 Perfil Email  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Mar Feb 01, 2011 7:01 am 
Arriba  
esta es la base de bash: http://www.etxea.net/docu/taller_bash/bash.html

en cuanto al script... un for, y comparaciones. sort solo si lo quieres ordenado. pero se complica un poco (habria que volcar a un fichero intermedio)

_________________
#446716

--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me...
(from comp.os.linux.misc)
[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil Email WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Mar Feb 01, 2011 9:00 am 
Arriba  
Yo lo que haría es ordenar primero el fichero. Luego ir leyendo de forma que, partiendo de 0 (o 1 según el caso) anotes todos los números comprendidos entre 0 y el número leído. Actualizas los índices, con lo que el número leído es el nuevo índice inferior y el que te dispones a leer es el índice superior, y anotas todos los números comprendidos entre ambos índices. Cuando se acabe el fichero y leas un número superior al parámetro, entonces paras.

Realmente el problema que veo es cómo ir leyendo los números de uno en uno

_________________
Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Mar Feb 01, 2011 9:34 am 
Arriba  
akodo escribió:
Yo lo que haría es ordenar primero el fichero. Luego ir leyendo de forma que, partiendo de 0 (o 1 según el caso) anotes todos los números comprendidos entre 0 y el número leído. Actualizas los índices, con lo que el número leído es el nuevo índice inferior y el que te dispones a leer es el índice superior, y anotas todos los números comprendidos entre ambos índices. Cuando se acabe el fichero y leas un número superior al parámetro, entonces paras.

Realmente el problema que veo es cómo ir leyendo los números de uno en uno


el tema es que eso no es bash. digo, hacer eso en bash es una locura.

el tema de fondo, es que bash no esta pensado para manejo numerico. y todo esto se complica enormemente....

quiza... a ver este codigo.

Código:
cat file |sort >> temp
for NUM in temp; do
[ $NUM -lt parametro ] && echo num >> temp2
done


con eso tienes un fichero con los numeros del primero menores que el parametro. la segunda parte es "solo" invertir

Código:
for NUM in {1..parametro};do ## creo que la sintaxis es esta ,pero no tengo ganas de abrir el man....
[ -z "$(cat temp2 |grep NUM)" ] && echo $NUM >> dest  # comprueba y si no esta, lo imprime a dest.
done


supongo que hay maneras mas elegantes, pero esa (segun yo) funciona.
y supongo tambien que hay maneras de juntarlo todo y que parezca elegante. pero esque lo he pensado a trozos, y no tenia ganas de juntarlo :P

PD: si necesitais que ponga la sintaxis habitual de los condicionales, avisais. hace poco que descubri esta, y me parece que simplifica mucho el codigo, asi que intento usarla.
:)

_________________
#446716

--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me...
(from comp.os.linux.misc)
[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil Email WWW  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Mar Feb 01, 2011 6:50 am
Mensajes: 3

Nota Publicado: Sab Feb 05, 2011 9:29 am 
Arriba  
muchas gracias a todos, voy a intentarlo y os cuento...

Editado -- Sab Feb 05, 2011 9:29 am --

muchas gracias Niky45, pero no consigo hacerlo funcionar!
el problema es que no ordena, y creo que es por los espacios en blanco, que debe saltarlos y coger sólo los números. Se supone que hay un comando para eso pero no consigo encontrarlo!
Gracias!

 Perfil Email  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

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

Nota Publicado: Sab Feb 05, 2011 9:35 am 
Arriba  
El comando tr permite convertir espacios en blanco en saltos de línea (ver man tr). Permite otras cosas, pero creo que necesitas eso.

Una vez convertidos los espacios en blanco en saltos de línea, un bucle for, o while, o incluso un simple cat, te permite enviar línea a línea cada número a una variable. De allí en más, ya te han explicado cómo se hace.

 Perfil  
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 2 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