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
Deja un comentario: