Foros del Web » Administración de Sistemas » Unix / Linux »

[SOLUCIONADO] script extraer lineas de un fichero y mostrarlas

Estas en el tema de script extraer lineas de un fichero y mostrarlas en el foro de Unix / Linux en Foros del Web. Hola a todos los usuarios de la comunidad. Bueno tiempo sin postear, esta vez necesito ayuda con un script en el cual se pregunta lo ...
  #1 (permalink)  
Antiguo 01/02/2014, 10:06
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
script extraer lineas de un fichero y mostrarlas

Hola a todos los usuarios de la comunidad.


Bueno tiempo sin postear, esta vez necesito ayuda con un script en el cual se pregunta lo siguiente.

-Crea un script llamado ver.sh que muestre lo siguiente extrayendolo de otro fichero llamado datos.txt:

Nombre y edades
-----------------
Pepe tiene 23 años
Paula tiene 34 años
...
asi con todos
...
...


Cita:
--Siendo el fichero " datos.txt" algo como
esto:

Pepe:23
Paula:34
Juan:27
Maria:54
Federico:50
Pablo:32
Sonia:33
Elena:60
Bueno lo estoy intentado realizar, y ya he conseguido extraer tanto el nombre como la edad, haciendo uso del cut.

Aquí posteo la parte de mi código, pero necesito que se vea correctamente y no como se ve este, espero me puedan ayudar.

Mi código hecho hasta ahora es:

Código BASH:
Ver original
  1. clear
  2. echo "Nombre y edades"
  3. echo "---------------"
  4.  
  5.  
  6. nombre=`cut -d ":" -f1 datos.txt`
  7. edad=`cut -d ":" -f2 datos.txt`
  8.  
  9. echo "$nombre tiene $edad años."

Y cuando se ejecuta en Linux se ve así:

Cita:
Nombre y edades
---------------
Pepe
Paula
Juan
Maria
Federico
Pablo
Sonia
Elena tiene 23
34
27
54
50
32
33
60 años.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #2 (permalink)  
Antiguo 04/02/2014, 14:30
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: script extraer lineas de un fichero y mostrarlas

Ya esta solucionado. dejo la respuesta para futuras consultas que a alguien le sirva.

Código BASH:
Ver original
  1. echo "Nombre y edades"
  2. echo "---------------"
  3.  
  4. for LINEA in `cat datos.txt ` #LINEA guarda el resultado del fichero datos.txt
  5. do
  6.     NOMBRE=`echo $LINEA | cut -d ":" -f1` #Extrae nombre
  7.     EDAD=`echo $LINEA | cut -d ":" -f2` #Extrae edad
  8.  
  9.     echo "$NOMBRE tiene $EDAD años." #Muestra resultado.
  10. done
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #3 (permalink)  
Antiguo 04/02/2014, 20:04
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: script extraer lineas de un fichero y mostrarlas

HackID1:
Evita leer archivos con la construcción "for linea in `cat ...`". Si hay algún espacio en el archivo, tus resultados no serán los esperados. Una forma más segura de leer un archivo línea a línea es
Código BASH:
Ver original
  1. while read LINEA; do
  2. ...
  3. done < datos.txt

Solo por diversión, te muestro un par de alternativas a tu script, quizás te sirvan para casos más complejos:

Código BASH:
Ver original
  1. sed 's/^\(.*\):\(.*\)$/\1 tiene \2 años/g' datos.txt # capturar todo hasta el primer : y todo hasta el final, reemplazar
Código BASH:
Ver original
  1. awk -F: '{ print $1 " tiene " $2 " años"}' datos.txt # la misma dinámica que 'cut' pero con varios campos a la vez
Código BASH:
Ver original
  1. echo ${LINEA%*:} tiene ${LINEA#:*} años # con la LINEA cargada en el bucle
Código BASH:
Ver original
  1. PARTES=( $(echo $LINEA| tr : " ") ) # usa ${PARTES[0]} y ${PARTES[1]}
Código BASH:
Ver original
  1. set -- $(echo $LINEA | tr : " ") # usa $1 y $2

Etiquetas: bash, cut
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:26.