Sistemas Operativos => GNU/Linux => Mensaje iniciado por: badyalberto en Domingo 18 de Octubre de 2009, 14:18
Título: Leer fichero caracter por caracter
Publicado por: badyalberto en Domingo 18 de Octubre de 2009, 14:18
Como puedo leer de un fichero de texto caracter por caracter ? Estoy haciendo un script en bash que necesito que lea los caracteres de un fichero y me cambie una vocales por otra. Yo lo que utilizo es:
while read linea do caracter=${linea:0:1} # luego aqui dentro hago un case para q dependiendo de q letra lea la cambie por una o otra. done Pero asi solo me lee un caracter de una linea, las lineas no son del mismo tamaño ni tienen los mismo campos :S
Título: Re: Leer fichero caracter por caracter
Publicado por: su - en Domingo 18 de Octubre de 2009, 17:46
Código: Bash
cat texto |whileread-n1 i; doecho$i; done
Con eso lo haces ;) pero ten en cuenta que tienes que crear un archivo nuevo para guardar lo que remplazas (no puedes escribir encima).
Título: Re: Leer fichero caracter por caracter
Publicado por: badyalberto en Domingo 18 de Octubre de 2009, 18:09
no entiendo eso del while read -1 2 i;
Yo ahora habia quitado el while read y lo habia puesto directo algo asi:
Título: Re: Leer fichero caracter por caracter
Publicado por: su - en Domingo 18 de Octubre de 2009, 19:44
La solucion con tr seria esta:
Código: Bash
cat poema2 |tr"e""a"> poema3
cat poema3 |tr"i""e"> poema4
cat poema4 |tr"o""u"> poema5
cat poema5 |tr"u""o"> poema6
cat poema7 |tr"a""u"> poema8
De lo contrario estarias aplicando el tr solo a poema2, borrano y creando nuevamente poema3.
Lo de while es simple: le pasamos a while la salida de cat usando pipes (el |) y de ahi, este lee 1 byte (ese es el flag -n 1) que es un caracter y lo asigna a $i. En ese ejemplo, read incluye retornos de carro ("n") y todo tipo de caracteres.
Ahora, te toca ver como usar while, read e if para hacer lo que quieres... o usar la otra solucion.
Título: Re: Leer fichero caracter por caracter
Publicado por: m0skit0 en Lunes 19 de Octubre de 2009, 14:41
Puedes usar >> (redirect append) en vez de > (redirect overwrite)...
Título: Re: Leer fichero caracter por caracter
Publicado por: su - en Miércoles 21 de Octubre de 2009, 03:47
Cita de: "m0skit0"
Puedes usar >> (redirect append) en vez de > (redirect overwrite)...
Pero eso es justamente el problema, >> no borra lo anterior, lo "agrega en pila". Eso se podria hacer de una forma optima con en C usando seek, read y mucha paciencia o con Perl y Tie::File de una forma fácil (usando arrays), o con while, read e if usando Bash :P
Título: Re: Leer fichero caracter por caracter
Publicado por: m0skit0 en Miércoles 21 de Octubre de 2009, 10:43
Ah, perdón perdón, entendí el problema al revés :unsure: