elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Eliminar lineas que no cumplan cierta condición
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Eliminar lineas que no cumplan cierta condición  (Leído 5,215 veces)
Afkael

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Eliminar lineas que no cumplan cierta condición
« en: 4 Febrero 2015, 14:07 pm »

Hola!!

Estoy necesitando eliminar todas las lineas de un archivo de texto que no cumplan la condición de empezar con las palabras "lote" o "vta"

Ejemplo del archivo original:

Código:
____________________________________________________________________________________________________________________________________
Trx |Fecha Pres| | Ventas | Dto. | Cod.Rechazo
|Fecha oper| | con/Dto. | Arancel | Mot.contrap.
____________________________________________________________________________________________________________________________________
lote ctdo | 11/11/14 | 16 Cupones | 6.304,95 | 94,57 |
+ VENTAS C/DESCUENTO CONTADO $ 6.304,95
- ARANCEL $ 94,57
- IVA CRED.FISC.COMERCIO S/ARANC 21,00% $ 19,86
- RETENCION ING.BRUTOS CORDOBA $ 232,14
- RETENCION IVA $ 62,10
- RETENCION IMP.GANANCIAS $ 62,10
----------------
IMPORTE NETO DE PAGOS $ 5.834,18
____________________________________________________________________________________________________________________________________
F.de Pago: ACRED.EN CTA.CTE.NRO 11042 el d?a 13/11/2014 $ 5.834,18 Nro.Liq: 20.158 F.Pres 11/11/2014
____________________________________________________________________________________________________________________________________
____________________________________________________________________________________________________________________________________
Trx |Fecha Pres| | Ventas | Dto. | Cod.Rechazo
|Fecha oper| | con/Dto. | Arancel | Mot.contrap.
____________________________________________________________________________________________________________________________________
lote ctdo | 12/11/14 | 11 Cupones | 3.029,72 | 45,44 |
+ VENTAS C/DESCUENTO CONTADO $ 3.029,72
- ARANCEL $ 45,44
- IVA CRED.FISC.COMERCIO S/ARANC 21,00% $ 9,54
- RETENCION ING.BRUTOS CORDOBA $ 111,55
- RETENCION IVA $ 29,84
- RETENCION IMP.GANANCIAS $ 29,84
----------------
IMPORTE NETO DE PAGOS $ 2.803,51
____________________________________________________________________________________________________________________________________
F.de Pago: ACRED.EN CTA.CTE.NRO 11042 el d?a 14/11/2014 $ 2.803,51 Nro.Liq: 20.165 F.Pres 12/11/2014
____________________________________________________________________________________________________________________________________
____________________________________________________________________________________________________________________________________
Trx |Fecha Pres| | Ventas | Dto. | Cod.Rechazo
|Fecha oper| | con/Dto. | Arancel | Mot.contrap.
____________________________________________________________________________________________________________________________________
lote ctdo | 13/11/14 | 13 Cupones | 1.832,47 | 27,50 |
+ VENTAS C/DESCUENTO CONTADO $ 1.832,47
- ARANCEL $ 27,50
- IVA CRED.FISC.COMERCIO S/ARANC 21,00% $ 5,78
- RETENCION ING.BRUTOS CORDOBA $ 67,47
- RETENCION IVA $ 18,05
- RETENCION IMP.GANANCIAS $ 18,05
----------------
Liquidaci?n Mensual https://www1.firstdata.com.ar/comercios/select_comercio.html
2 de 4 01/12/2014 09:52 a.m.
IMPORTE NETO DE PAGOS $ 1.695,62
_____________________________________

Ejemplo del archivo procesado:

Citar
lote ctdo | 11/11/14 | 16 Cupones | 6.304,95 | 94,57 |
lote ctdo | 12/11/14 | 11 Cupones | 3.029,72 | 45,44 |
lote ctdo | 13/11/14 | 13 Cupones | 1.832,47 | 27,50 |

En fin.. parece simple pero no encuentro info en interner para hacerlo..

Puede ser tanto en batch como en ruby.. Gracias!!


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Eliminar lineas que no cumplan cierta condición
« Respuesta #1 en: 4 Febrero 2015, 14:37 pm »

Código
  1. (Type "file.txt" | Findstr /V "^lote ^vta")>"outputFile.txt"

Saludos


En línea



Afkael

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: Eliminar lineas que no cumplan cierta condición
« Respuesta #2 en: 4 Febrero 2015, 15:02 pm »

Si.. por ese lado lo estaba buscando.. pero la flag /V realiza la tarea inversa a lo que necesito..

Citar
/V         Prints only lines that do not contain a match.

pensaba marcar con un asterisco al comienzo de las lineas que no cumplieran la condición y luego

Código:
(Type "file.txt" | Findstr /V "^*")>"outputFile.txt"

o algo asi..
En línea

explorer

Desconectado Desconectado

Mensajes: 102


Analista/Programador Perl


Ver Perfil
Re: Eliminar lineas que no cumplan cierta condición
« Respuesta #3 en: 4 Febrero 2015, 15:26 pm »

Código:
egrep "^(lote|vta)" file.txt
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Eliminar lineas que no cumplan cierta condición
« Respuesta #4 en: 4 Febrero 2015, 15:53 pm »

Si.. por ese lado lo estaba buscando.. pero la flag /V realiza la tarea inversa a lo que necesito..

Perdón, lo entendí al revés.

Simplemente no escribas el parámetro /V y así obtendrás el resultado contrario.

Citar
lote ctdo | 11/11/14 | 16 Cupones | 6.304,95 | 94,57 |
lote ctdo | 12/11/14 | 11 Cupones | 3.029,72 | 45,44 |
lote ctdo | 13/11/14 | 13 Cupones | 1.832,47 | 27,50 |



Código:
(Type "file.txt" | Findstr /V "^*")>"outputFile.txt"

El comando FindStr utiliza patrones de expresiones regulares, en todo caso sería "^.*", pero la expresión que debes utilizar te la indiqué en el otro comentario.

Lee sobre el uso de expresiones regulares (RegEx): http://en.wikipedia.org/wiki/Regular_expression

Saludos
« Última modificación: 4 Febrero 2015, 16:02 pm por Eleкtro » En línea



Afkael

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: Eliminar lineas que no cumplan cierta condición [SOLVED]
« Respuesta #5 en: 4 Febrero 2015, 16:03 pm »

Código:
egrep "^(lote|vta)" file.txt

emm.. cómo imprimo a un archivo ese comando??


Perdón, lo entendí al revés.

Simplemente no escribas el parámetro /V y así obtendrás el resultado contrario.

Saludos

uff.. probé con todos las flags que me pareció pudieran funcionar y nunca se me ocurrio quitar la flag u.u

Gracias.. funciona
En línea

explorer

Desconectado Desconectado

Mensajes: 102


Analista/Programador Perl


Ver Perfil
Re: Eliminar lineas que no cumplan cierta condición
« Respuesta #6 en: 4 Febrero 2015, 16:59 pm »

Lo puedes ejecutar desde la línea de comandos o shell.
Código:
egrep "^(lote|vta)" file.txt > outputfile.txt
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Eliminar lineas que no cumplan cierta condición
« Respuesta #7 en: 4 Febrero 2015, 17:41 pm »

Lo puedes ejecutar desde la línea de comandos o shell.
Código:
egrep "^(lote|vta)" file.txt > outputfile.txt

Grep es una utilidad que encuentras en sistemas UNIX o derivados. Si esta utilizando un sistema con Windows tendría que bajarse un port de grep.
En línea

explorer

Desconectado Desconectado

Mensajes: 102


Analista/Programador Perl


Ver Perfil
Re: Eliminar lineas que no cumplan cierta condición
« Respuesta #8 en: 4 Febrero 2015, 22:19 pm »

Pues entonces, con Perl:

Código
  1. perl -nE "/^(lote|vta)/ and print" file.txt > output.txt
« Última modificación: 4 Febrero 2015, 22:25 pm por explorer » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines