es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer que las expresiones regulares funcionen con el comando perl y extraer números de un archivo?

Estoy intentando extraer de un archivo delimitado por tabuladores un número que necesito almacenar en una variable. Estoy abordando el problema con una expresión regular que gracias a algunas investigaciones en línea he podido construir.

El archivo está compuesto de la siguiente manera:

0 0 2500 5000
1 5000 7500 10000
2 10000 12500 15000
3 15000 17500 20000
4 20000 22500 25000
5 25000 27500 30000

Necesito extraer el número de la segunda columna dada un número de la primera. Escribí y probé en línea la expresión regular:

(?<=5\t).*?(?=\t)

Necesito el 25000 de la sexta línea.

Comencé a trabajar con sed pero como ya saben, no le gusta el patrón de búsqueda hacia atrás y hacia adelante incluso con la opción -E para habilitar la versión extendida de expresiones regulares. También intenté con awk y grep y fallé por razones similares.

Yendo más allá, descubrí que Perl podría ser el comando adecuado pero no puedo hacer que funcione correctamente. Estoy intentando con el comando

perl -pe ”/(?<=5\t).*?(?=\t)/” | INFO.out

pero admito mi escaso conocimiento y estoy un poco perdido.

El siguiente paso sería leer el “5” en la expresión regular desde una variable, así que si conocen problemas que puedan surgir, por favor avísenme.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar grep para extraer el número en la segunda columna dado un número en la primera. Para extraer el número 25000 de la sexta línea, puede utilizar el siguiente comando:


    grep -E '5\t([0-9]+)\t' INFO.out

    Para leer el “5” en la expresión regular desde una variable, puede utilizar el siguiente comando:


    grep -E "$var\t([0-9]+)\t" INFO.out

Comments are closed.