Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Afkael en 4 Febrero 2015, 14:07 pm



Título: Eliminar lineas que no cumplan cierta condición
Publicado por: Afkael 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!!


Título: Re: Eliminar lineas que no cumplan cierta condición
Publicado por: Eleкtro en 4 Febrero 2015, 14:37 pm
Código
  1. (Type "file.txt" | Findstr /V "^lote ^vta")>"outputFile.txt"

Saludos


Título: Re: Eliminar lineas que no cumplan cierta condición
Publicado por: Afkael 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..


Título: Re: Eliminar lineas que no cumplan cierta condición
Publicado por: explorer en 4 Febrero 2015, 15:26 pm
Código:
egrep "^(lote|vta)" file.txt


Título: Re: Eliminar lineas que no cumplan cierta condición
Publicado por: Eleкtro 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


Título: Re: Eliminar lineas que no cumplan cierta condición [SOLVED]
Publicado por: Afkael 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


Título: Re: Eliminar lineas que no cumplan cierta condición
Publicado por: explorer 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


Título: Re: Eliminar lineas que no cumplan cierta condición
Publicado por: MinusFour 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.


Título: Re: Eliminar lineas que no cumplan cierta condición
Publicado por: explorer en 4 Febrero 2015, 22:19 pm
Pues entonces, con Perl:

Código
  1. perl -nE "/^(lote|vta)/ and print" file.txt > output.txt