Cómo leer archivos línea por línea en Bash Script [3 Methods]
Al escribir un script bash, depende del flujo de automatización, a veces el script tiene que leer el contenido del archivo línea por línea. Aquí aprendemos 3 métodos en un script bash para leer el archivo línea por línea.
Método 1: usar el redirector de entrada
La forma más sencilla de leer un archivo línea por línea es usar el redirector de entrada en un bucle while.
Para demostrarlo, hemos creado un archivo de muestra llamado ‘mycontent.txt’ y lo usaremos a lo largo de este tutorial.
$ cat mycontent.txt
This is a sample file
We are going through contents
line by line
to understand
Vamos a crear un script llamado ‘example1.sh’ que usa aporte redirigir y círculo.
$ more example1.sh
#!/bin/bash
while read y
do
echo "Line contents are : $y "
done < mycontent.txt
Cómo funciona:
– Declarando shell que es «bash»
– Comenzando el ciclo while y guardando el contenido de la línea en la variable «y»
– hacer parte del bucle while (Punto de partida)
– echo para imprimir y «$y» significa imprimir valor variable, es decir, línea
– Leer el contenido del archivo usando el redirector de entrada «<" y cerrar con listo
Ejecución de Script y Salida:
$ ./example1.sh
Line contents are : This is a sample file
Line contents are : We are going through contents
Line contents are : line by line
Line contents are : to understand
Método 2: Usando el comando cat
El segundo método es usar el comando cat y luego enviar su producción como aporte al rato círculo utilizando el tubo.
Cree un archivo de secuencia de comandos ‘example2.sh’, con contenidos como:
$ more example2.sh
#!/bin/bash
cat mycontent.txt | while read y
do
echo "Line contents are : $y "
done
Cómo funciona:
– Declarando shell que es «bash»
– Salida del comando cat enviado como entrada al ciclo while usando tubería
“|” y guardando el contenido de la línea en la variable «y»
– hacer parte del bucle while (Punto de partida)
– echo para imprimir y «$y» significa imprimir valor variable, es decir, línea
– Cierre del ciclo while hecho
Ejecución de Script y Salida:
$ ./example2.sh
Line contents are : This is a sample file
Line contents are : We are going through contents
Line contents are : line by line
Line contents are : to understand
Consejo: podemos combinar todos los comandos y usarlos como oneliners.
Producción:
$ while read line; do echo $line; done < mycontent.txt
This is a sample file
We are going through contents
line by line
to understand
3. Usando el nombre de archivo pasado como argumento
Este tercer método enviará el nombre del archivo como un argumento de entrada a través de la línea de comandos.
Cree un archivo de script llamado ‘example3.sh’, como:
$ more example3.sh
#!/bin/bash
while read y
do
echo "Line contents are : $y "
done < $1
Cómo funciona:
– Declarando shell que es «bash»
– Comenzando el ciclo while y guardando el contenido de la línea en la variable «y»
– hacer parte del bucle while (Punto de partida)
– echo para imprimir y «$y» significa imprimir valor variable, es decir, línea
– Leer el contenido del archivo desde el argumento de la línea de comando, es decir, $ 1 usando el redirector de entrada «<" y cerrar con listo
Ejecución de Script y Salida:
$ ./example3.sh mycontent.txt
Line contents are : This is a sample file
Line contents are : We are going through contents Output of Script
Line contents are : line by line
Line contents are : to understand
Manejo de barra invertida y carácter de escape
Cuando el contenido del archivo tiene una barra invertida y caracteres de escape, el comando de lectura solía ignorar esos caracteres de barra invertida y escape.
Si queremos leer todo desde el archivo entonces use -r
opción para evitar que los escapes de barra invertida se interpreten y muestren el valor en la consola.
Si el contenido del archivo tiene un separador de archivos como una coma o un tubo, podemos usar IFS (separador de campo interno) para dividir el archivo según el delimitador y mostrar los valores.
Ejemplo de secuencia de comandos de shell:
#!/bin/bash
inputfile="foobar.txt"
while IFS=, read -r y
do
echo $y
done < $inputfile
Flujo de guión:
– Asigne la ruta del archivo a la variable ‘archivo de entrada’
– Mientras que el bucle lee el archivo línea por línea
– -r evita que se interpreten los escapes de barra invertida
– IFS (separador de campo interno), si queremos dividir la línea con el separador de campo, debemos especificar el valor del separador (por ejemplo, si la línea tiene un valor como ‘foo, bar’ y queremos dividir la coma, entonces el valor de IFS debe ser ( IFS=,))
– echo ayudará a imprimir el contenido en la consola
– una vez alcanzado el final del archivo mientras sale el bucle
Conclusión
Este tutorial explica cómo leer el contenido del archivo línea por línea usando el script bash shell con ejemplos. Ayuda a buscar cadenas en un archivo leyendo líneas individualmente.
Gracias por leer, por favor deje sus sugerencias y comentarios en la sección de comentarios.