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 originalwhile read LINEA; do
...
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 originalsed 's/^\(.*\):\(.*\)$/\1 tiene \2 años/g' datos.txt # capturar todo hasta el primer : y todo hasta el final, reemplazar
Código BASH:
Ver originalawk -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 originalecho ${LINEA%*:} tiene ${LINEA#:*} años # con la LINEA cargada en el bucle
Código BASH:
Ver originalPARTES=( $(echo $LINEA| tr : " ") ) # usa ${PARTES[0]} y ${PARTES[1]}
Código BASH:
Ver originalset -- $(echo $LINEA | tr : " ") # usa $1 y $2