Banda Ancha EU

Comunidad de usuarios
de fibra, móvil y ADSL

Leer lineas de un TXT con un delimitador

Serakon

Tengo un fichero de texto y una palabra en cada linea con esto:

while read line
do
echo $line
done < "./1.txt"

saco el texto de cada linea. Me lee cada linea

Lo que me gustaría hacer es si cada linea se compone así con un delimitador como ";" Ejemplo de texto:

guasano muerto;casa

Me gustaría es que me lo dividiera en 2 variables cada linea la primera parte se llamara "animal" y tras el ";" "sitio" y pudiera poner luego algo similar a esto:

echo $animal "esta en " $sitio

Y me dijera "gusano muerto esta en casa".

No se si me explico, resumiendo es que lea cada linea del fichero de texto y que en base al delimitador me lo divida en variables distintas.

mceds

Creo que ya te lo mencioné en tu anterior post: tanto cut como awk permiten dividir líneas con un "delimitador" a gusto de cada cual.

¿Alguna razón en particular para leer "./1.txt" en vez de "1.txt"? Curiosidad.

🗨️ 4
Serakon

ok, mirare a ver eso que dices.

Por que alguna vez me fallaba si es en 1.txt no cogía bien el directorio parece. con ."/" parece que no da lugar a dudas de que esta en el mismo.

🗨️ 1
mceds

Lo que no te "coge" son los ejecutables. Por ejemplo, no puedes crear un programa en Python "foo.py" y ejecutarlo así a secas: por razones de seguridad, la shell busca los ejecutables en los directorios de la variable $PATH. Si quieres ejecutarlo desde un directorio estándar, hay que hacerlo con "./foo.by".

Pero, para los archivos normalitos, no es necesario.

Serakon

La verdad que como mi nivel de programación es casi 0, miro documentación de cut y awk y ya recuerdo porque no hice es como leer chino.

En el que tengo de Powershell hasta entiendo como funciona lo del delimitador y como va, pero el resto de como maneja ficheros ni idea aquí en linux al revés se manejar los ficheros por comandos pero lo de delimitar pfff ni idea.

🗨️ 1
mceds
1

Los man son archivos de referencia, más que una ayuda o un tutorial. A veces, sobre todo si son muy largos, es mejor acudir directamente a internet. Buscando esto he llegado fácilmente a las opciones:

bash cut delimitador
bash awk "separador"

BocaDePez
BocaDePez
1
	$ echo "guasano muerto;casa" | awk -F ';' '{print "el "$1" esta en "$2}'
	el guasano muerto esta en casa
🗨️ 1
Serakon

Muchas gracias, voy a hacer pruebas a ver si puedo aplicarlo bien.