Cómo leer un archivo línea por línea usando Bash

Suraj Joshi 5 noviembre 2020
Cómo leer un archivo línea por línea usando Bash

Podemos enfrentarnos a varias situaciones en Bash, en las que necesitamos procesar los datos almacenados en un archivo línea por línea. En tales casos, necesitamos leer el contenido del archivo. Usamos el comando read en Bash para leer un archivo línea por línea.

Leer el archivo línea por línea en Bash

Sintaxis

while IFS= read -r line
do
  echo "$line"
done < file_name

Lee el contenido del archivo file_name una línea a la vez e imprime las líneas una a una en la terminal. El bucle se ejecuta hasta que llegamos al final del archivo. La IFS se establece en la cadena nula, lo que ayuda a retener los espacios en blanco delanteros y traseros.

Alternativamente, el comando anterior también puede ser reemplazado por el siguiente comando dentro de una sola línea:

while IFS= read -r line; do echo $line; done < file_name

Ejemplo: Leer el archivo línea por línea en negrita

En el ejemplo, leeremos el archivo file.txt, que contiene números en cada línea y luego encontraremos la suma de todos los números del archivo.

Contenido del file.txt

1
5
6
7
8
10
#!/bin/bash

sum=0
echo "The numbers in the file are:"
while IFS= read -r line
do
  echo "$line"
  sum=$(( $sum + $line ))
done < file.txt
echo "The sum of the numbers in the file is:$sum"

Resultado:

The numbers in the file are:
1
5
6
7
8
The sum of the numbers in the file is:27

Lee los números línea por línea de un archivo llamado file.txt y luego resume todos esos números y finalmente hace eco de la suma.

Ejemplo: Establecer los campos de los archivos como variables

Podemos establecer campos en el archivo a variables pasando múltiples variables al comando read, que separará los campos dentro de una línea basada en el valor de IFS.

El contenido de file.txt

Rohit-10
Harish-30
Manish-50
Kapil-10
Anish-20
#!/bin/bash

while IFS=- read -r name earnings
do
    echo "$name" has made earnings of "$earnings" pounds today!
done < file.txt

Resultado:

Rohit has made earnings of 10 pounds today!
Harish has made earnings of 30 pounds today!
Manish has made earnings of 50 pounds today!
Kapil has made earnings of 10 pounds today!

Aquí, cada línea del archivo se divide en dos segmentos, ya que hemos pasado dos variables al comando read. El primer segmento se asignará a la variable name, que se extiende desde el principio de la línea hasta el primer -, y la parte restante se asignará a la variable earnings.

Métodos alternativos para leer archivos en Bash

#!/bin/bash

while IFS=- read -r name earnings
do
    echo "$name" has made earnings of "$earnings" pounds today!
done < <(cat file.txt )

Resultado:

Rohit has made earnings of 10 pounds today!
Harish has made earnings of 30 pounds today!
Manish has made earnings of 50 pounds today!
Kapil has made earnings of 10 pounds today!

Aquí, el nombre de archivo file.txt se pasa al programa como una salida del comando cat.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn