¿Cómo leer un fichero línea a línea desde BASH?
Tabla de contenido:
- Lectura de un archivo Línea por línea Sintaxis
- Leer un archivo Ejemplos línea por línea
- Métodos alternativos de lectura de archivos
- Usando una sustitución de proceso
- Usando una cadena Here
- Usando el descriptor de archivo
- Conclusión
Al escribir scripts de Bash, a veces se encontrará en situaciones en las que necesita leer un archivo línea por línea. Por ejemplo, puede tener un archivo de texto que contiene datos que el script debe procesar.
En este tutorial, discutiremos cómo leer un archivo línea por línea en Bash.
Lectura de un archivo Línea por línea Sintaxis
La sintaxis más general para leer un archivo línea por línea es la siguiente:
while IFS= read -r line do echo "$line" done < input_file
o la versión equivalente de una sola línea:
while IFS= read -r line; do echo $line; done < input_file
¿Como funciona?
El archivo de entrada (
input_file
) es el nombre del archivo que desea abrir para lectura mediante el comando de
read
. El comando de
read
lee el archivo línea por línea, asignando cada línea a la variable de
line
. Una vez que se procesen todas las líneas, el ciclo while terminará. El separador de campo interno (
IFS
) se establece en la cadena nula para preservar los espacios en blanco iniciales y finales, que es el comportamiento predeterminado del comando de
read
.
Leer un archivo Ejemplos línea por línea
Echemos un vistazo al siguiente ejemplo. Supongamos que tenemos un archivo llamado
distros.txt
contiene una lista de algunas de las distribuciones de Linux más populares y sus administradores de paquetes separados por comas (
,
):
Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf
Para leer el archivo línea por línea, debe ejecutar el siguiente código en su terminal:
while IFS= read -r line do echo "$line" done < distros.txt
El código leerá el archivo por línea, asignará cada línea a una variable y hará eco de la variable. Básicamente, vería el mismo resultado que si mostrara el contenido del archivo con el comando cat.
¿Qué sucede si desea imprimir solo las distribuciones que usan apt? Una forma sería usar la instrucción if y verificar si la línea contiene la subcadena apt:
while IFS= read -r line do if]; then echo "$line" fi done < distros.txt
Ubuntu, apt Debian, apt
Al leer el archivo línea por línea, también puede pasar más de una variable al comando de lectura que dividirá la línea en campos basados en el
IFS
. El primer campo se asigna a la primera variable, la segunda a la segunda variable, y así sucesivamente. Si hay más campos que variables, los campos restantes se asignan a la última variable.
En el siguiente ejemplo, estamos configurando IFS en una coma (
,
) y pasando dos variables
distro
y
pm
al comando de lectura. Todo, desde el comienzo de la línea hasta la primera coma, se asignará a la primera variable (
distro
) y el resto de la línea se asignará a la segunda variable (
pm
):
while IFS=, read -r distro pm do echo "$pm" is the package manager for "$distro" done < distros.txt
apt is the package manager for Ubuntu apt is the package manager for Debian yum is the package manager for CentOS pacman is the package manager for Arch Linux dnf is the package manager for Fedora
Métodos alternativos de lectura de archivos
Usando una sustitución de proceso
La sustitución de procesos le permite pasar la salida del comando como un nombre de archivo:
while IFS= read -r line do echo "$line" done < <(cat input_file)
Usando una cadena Here
Here String es una variante del documento Here. La cadena
(cat input_file)
mantendrá las nuevas líneas:
while IFS= read -r line do echo "$line" done <<< $(cat input_file)
Usando el descriptor de archivo
También puede proporcionar la entrada al bucle utilizando un descriptor de archivo:
while IFS= read -r -u9 line do echo "$line" done 9< input_file
Cuando trabaje con descriptores de archivos, use un número entre 4 y 9 para evitar conflictos con los descriptores de archivos internos del shell.
Conclusión
En Bash, podemos leer un archivo línea por línea al proporcionar el nombre de archivo como entrada para un ciclo de lectura while.
terminal de bashRevisión: Vista rápida Plus le permite leer casi cualquier archivo comercial
Si desea ampliar las capacidades de vista previa de Windows, intente esto esta utilidad de visualización de archivos. Se integra en Explorer y admite más de 300 tipos de archivos, incluidos muchos para los que ya no es dueño del software.
BMP Wrap le permite ocultar archivos como imágenes BMP y enviar por correo electrónico cualquier tipo de archivo como archivo adjunto
Además de ocultar archivos dentro Archivos de imagen BMP, conversión de archivos para permitir que se envíen como archivos adjuntos de correo electrónico, BMP Wrap también se utiliza para cifrar archivos.
No se pudo guardar el archivo porque no se pudo leer el archivo de origen
Si no puede descargarlo y ve el appdatalocaltemp no se pudo guardar porque no se pudo leer el error del archivo fuente en Firefox, esto es lo que debe hacer.