Leer un archivo de texto línea por línea desde el Terminal de Linux
Me surgió el otro día la necesidad de leer el contenido de un archivo de texto desde el terminal de Linux. Quería que un comando linux tomara como argumentos o parámetros de entrada el contenido de ese archivo, de tal forma que cada argumento correspondería a una línea de ese archivo.
Para probar el script que veremos posteriormente tenemos que crear el archivo de texto a leer, que llamaremos lista.txt y que tendría el siguiente contenido:
Madrid
Barcelona
Valencia
Bilbao
Lo siguiente sería crear un script, el cual leyera línea por línea el archivo de texto. Para cada línea aplicara el comando deseado. Sería algo así:
#! / bin / bash
FILENAME=nombre_archivo
while read line
do
COMANDO $line
done < $FILENAME
En mi caso, como es solo un ejemplo, he escogido el comando "echo", que mostrará los valores por pantalla, así que correspondería al siguiente código:
#! / bin / bash
FILENAME=lista.txt
while read line
do
echo $line
done < $FILENAME
Al ejecutarlo, se mostraría en el terminal el siguiente texto:
Madrid Barcelona Valencia Bilbao
Con ésto ya habríamos conseguido nuestro propósito.
Este script puede servirnos como base para crear otros más complejos, o para pasar muchos argumentos a un comando sin tener que escribirlos directamente en el terminal.
Tweet
19 Comentarios:
hola, que bueno tu post!!!, ahora mi duda es como hago para pasarle el archivo a leer al control while?? no logo que me ande...saludos!!!
Hola.
Efectivamente al redactar el post no escribí correctamente el script. Ahora ya está corregido y probado.
Muchas gracias por comentar.
Felipe, es excelente porque lo hiciste simple.
Como se podría hacer para leer desde dos archivos a la vez?
Por ejemplo en uno tendría un listado de ip´s y en el otro comandos a ejecutar.
Gracias!
Hola,
El siguiente comando te puede valer (asumiendo que los dos archivos tienen el mismo número de líneas):
awk '{print;getline < "file1";print $0}' file2
Fuente:
http://www.unix.com/shell-programming-scripting/103827-need-shell-script-read-two-file-same-time-print-out-single-file.html
Saludos.
muy bueno y agradecería como copio a otro txt determinadas lineas con una condicion. G
Gracias
Hola.
No lo he probado, pero creo que lo que buscas se haría así:
FILENAME=$1
cat $FILENAME | while read LINE
do
if [ "$LINE" = "hola" ]
then
echo "$LINE" >> otro_archivo.txt
fi
done
Pruébalo y si no te funciona coméntamelo e intentaré ayudarte.
Saludos.
cómo puedo en lugar que imprima las cadenas que imprima números empezando del 1 osea
1
2
3
4
Hola.
Esta aplicación simplemente muestra lo que contiene un archivo de texto. Puedes crearte un archivo con los números, si eso es lo que deseas mostrar.
Saludos
Hola......
y como podria leer desde una linea del archivo, una posicion especifica...
A;B;C;D;E;F;G;
I;J;K:L;M;N;O;
como podria obtener A, I
siendo siempre la primera columna la que quiero obtener????
Hola.
Para hacer ésto debes de utilizar el comando awk, de la siguiente manera:
awk -F';' '{ print $1 }' nombrearchivo
Para más información puedes leer un post que hice:
http://felinfo.blogspot.com.es/2012/10/uso-basico-del-comando-awk-linux.html
se puede recorrer dos archivos de esa manera?
Hola Daniel.
Claro, puedes crearte un script que recorra dos archivos. Únicamente debes de cambiar el FILENAME, que corresponde al nombre del archivo.
Saludos.
Hola Felipe,
Quisiera desplegar en un dialog el contenido de un archivo para que se despliegue como opción de entrada.
Por ejemplo tengo un archivo que contiene nombres de países y quiero que ejecutando un programa muestre en un dialog todos los países para que el usuario final seleccione uno y de ahí ejecute un script particular. Se entiende¿?
Desde ya muchas gracias
Hola Matu.
Me faltan datos sobre lo que quieres hacer. ¿Se trata de una aplicación, de una web? ¿en qué lenguaje estás trabajando?
Saludos.
Perdona, lo que estoy haciendo es en un script bash en linux ;)
Hola Matu.
Aquí se habla sobre cómo hacer un menú con múltiples opciones desde bash script:
http://stackoverflow.com/questions/11279423/bash-getopts-with-multiple-and-mandatory-options
Si tienes alguna duda, dímelo.
Saludos.
Hola tengo un fichero con la siguiente estructura
-P INPUT DROP
-P OUTPUT ACCEPT
-P FORWARD ACEEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -s 127.0.0.0/8 ! -i lo -j DROP
Quisiera leer linea por linea y ejecutar el comando
iptables $linea
para que por cada linea del fichero ejecute iptables y el resto de la linea pero cuando hago eso da error me pudieras ayudar gracias
Hola Lázaro.
Indica qué error te da. ¿Has probado el ejemplo que muestro en este post?.
Saludos.
hola, tengo un archivo A y un archivo B, y debo actualizar el B en base a un campo que está en ambos. Como lo puedo hacer? con el FILENAME?
Publicar un comentario