systemadmin.es » Script » Leer linea a linea en bash

Leer linea a linea en bash

Para hacer un script en bash para leer linea a linea tenemos dos opciones: Podemos usar el IFS (Internal Field Separator) o bien usar una subshell con read. Vamos a ver ambas formas:

Vamos a suponer un fichero de entrada como el siguiente:

# cat ejemplo
soy un ejemplo de linea 1
soy otro ejemplo de linea 2

Por defecto si usásemos un for con este fichero tendríamos la siguiente salida:

# for i in $(cat ejemplo); do echo $i; done
soy
un
ejemplo
de
linea
1
soy
otro
ejemplo
de
linea
2

Vamos a ver como usar el IFS para hacerlo linea a linea. Podemos ver en la página man de bash la siguiente descripción del IFS:

IFS    The  Internal  Field  Separator  that  is  used  for  word
splitting  after  expansion  and  to  split lines into words with
the read builtin command.  The default value is
<space><tab><newline>.

Usaremos el comando echo para definir el IFS únicamente con una linea nueva y a continuación podremos realizar el for normalmente:

# IFS="$(echo)"
# for i in $(cat ejemplo); do echo $i; done
soy un ejemplo de linea 1
soy otro ejemplo de linea 2

Otra forma de hacer esto es mediante el uso de read y una subshell, vamos a ver un ejemplo:

# cat ejemplo | ( while read line; do echo $line; done )
soy un ejemplo de linea 1
soy otro ejemplo de linea 2

La salida del cat la redirigimos a la subshell (la parte entre paréntesis) la cual hace un loop con read que lee linea a linea.

Ambas opciones son perfectamente válidas, depende del caso convendrá más una que otra.

Relacionados

Imprimir Imprimir

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>