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 is a backend software engineer at Matrice.ai.
LinkedIn