Script - recorriendo cadenas y distinguiendo si es numero o cadena

Imagen de bitru
0 puntos

Hola, ante todo muchas gracias por adelantado por la ayuda en este delirante tema.

El problema es el siguiente, en un archivo, llamemos lo archivo.txt, tengo:

/esto/es/una/ruta
9
78
34
esto/es/otra/ruta
esto/sigue/siendo/otra/ruta
4
33

Hasta aqui bien, ahora, queriendo recorrer el archivo, (supongo que no es nada del otro mundo para los que sabeis), lo que quiero hacer es separar las cadenas de texto, de los numeros, para realizar una operacion u otra (con un if then else fi creo que es suficiente).

Es posible hacerlo? y si no, que me recomendais?

Imagen de joseluis
+1
0
-1

Una posible solución es utilizar egrep para ver si la cadena cumple con un determinado patrón (en este caso solo números):

   if [ "${cadena}" = "$(echo ${cadena} | egrep '^[0-9]*$')" ]; then 
      echo son solo numeros
   else 
      echo hay otros caracteres que no son números
   fi

Ejecutandolo con cadena=14323245 mostrará el mensaje "son solo numeros", mientras que si se ejecuta con cadena=2345231kjsdafsadf23545 mostrará el mensaje "hay otros caracteres que no son números".

+1
0
-1

Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

Imagen de bitru
+1
0
-1

Muchas gracias! Lo añadire a ver que tal se porta :D

+1
0
-1
Imagen de bitru
+1
0
-1

while read line
do

g=`echo $line | sed '/^$/d' |sed '/^\//d'`
characters=`echo $line | awk -F"/" '{ print $(NF) }'`

if [ -z $g ]
then
sudo svn blame $line > $(pwd)/errors/$characters.check
archiv=$(pwd)/errors/$characters.check
echo "$line" >> $(pwd)/errors/$characters.check
#echo $characters
else
cat $archiv | head -n $line | tail -n 1 >> $(pwd)/errors/check.txt

pln=`echo $(pwd)/errors/Client_checkstyle_errors.xml | grep -n "$archiv"`
cln=`echo $(pwd)/errors/Client_checkstyle_errors.xml | awk 'NR==$pln"+"1'`
nln=`echo $cln | awk -F"message=\"" '{ print $2 }'`
jln=`echo $nln | awk -F"\"" '{ print $1 }'`

echo $jln >> $(pwd)/errors/check.txt
#echo number
fi

done < $(pwd)/errors/clean_final.data

+1
0
-1
Imagen de JAVIER NAVARRO ALTIMIRA
+1
0
-1

#!/bin/bash

# Crea un script con los datos del ejemplo y guardalo con el nombre de datos
# Guarda este comentario con el nombre de Datos.sh
# chmod 755 Datos.sh
# Ejecuta Datos.sh, comprueba las lineas y separa las que contienen números de
# las que contienen letras

# Leer todas las lineas
for linea in `cat datos`
do
# En cada linea elimina los números
# Si la ruta contiene también números puede conducir a error
# dependiendo de si esa ruta se usa para algo dado que los
# números se eliminaran, convendria que salvaras la ruta original
# en alguna variable
ValorDeLaLinea=`echo $linea | tr -d [:digit:]`
if [ ${#ValorDeLaLinea} -ne 0 ]; then
echo "Letras: $linea" # esta linea es de letras
else
echo "Números: $linea" # esta linea tiene números
fi
done

echo -n "Pulsa enter para salir . . ." && read

+1
0
-1