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

script bash parsear string

Estas en el tema de script bash parsear string en el foro de Unix / Linux en Foros del Web. Buenas, Tengo el siguiente string: aa:10 bb:20 KB cc:30 KB Me gustaria guardar en unas variable los valores 20 y 30. por ejemplo: variableB=20 variableC=30 ...
  #1 (permalink)  
Antiguo 21/03/2016, 07:45
 
Fecha de Ingreso: noviembre-2012
Mensajes: 5
Antigüedad: 9 años, 9 meses
Puntos: 1
Pregunta script bash parsear string

Buenas,

Tengo el siguiente string:

aa:10 bb:20 KB cc:30 KB

Me gustaria guardar en unas variable los valores 20 y 30. por ejemplo:
variableB=20
variableC=30


He provado con esto, pero no me acaba de funcionar el comando SED:

Código:
variableB=$(grep 'bb:' fichero.log | sed 's/^.*bb://')
variableC=$(grep 'bb:' fichero.log | sed 's/^.*://')
El grep bb: es para recojer la linea del fichero.
La variable C como son los ultimos : si que los coje bien pero con el KB al final

Agradecería cualquier tipo de ayuda

Gracias
  #2 (permalink)  
Antiguo 21/03/2016, 08:50
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: script bash parsear string

El manejo de cadenas en SHELL es bastante limitado, como podrás ver. Si tu script es complicado, harías mejor en escribirlo con Perl o Python.

Dicho eso, esto se puede hacer de muchas maneras (awk, cut, sed, e incluso subcadenas con bash), pero ya que empezaste usando sed, hagámoslo con sed:

VALORES=( $(sed 's/^.*bb:\([0-9]*\) KB cc:\([0-9]*\) KB.*$/\1 \2/' fichero.log) )
variableB=${VALORES[0]}
variableC=${VALORES[1]}

más allá de los paréntesis escapados \) y \(, lo que le pedimos a sed es que busque bb: seguido de números, la cadena literal " KB", y luego lo mismo con cc.

Esto mismo se puede hacer con:
- grep, y el modificador -o
- awk, usando el modificador -F que admite varios caracteres como delimitadores de campos
- cut, aunque deberías usar varios encadenados

Como comentario adicional: si el archivo es grande o hay muchas líneas para procesar, hacer un grep en el archivo para filtrar las líneas que te interesan suele ser más rápido que filtrarlas directamente con sed o awk.


Saludos.

Etiquetas: bash, sed, string
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 19:52.