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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  ayuda con pequeño script
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con pequeño script  (Leído 4,893 veces)
ramos_45

Desconectado Desconectado

Mensajes: 11


Ver Perfil
ayuda con pequeño script
« en: 26 Septiembre 2018, 22:51 pm »

Buenas a todos.

Hace años estuve registrado en este foro pero por algún motivo , tal vez inactividad , mi cuenta no existía.

El motivo de este post, es para ver si algún gurú me podría hacer un script muy simple, ya que yo desconzco de programacion, aunque soy capaz de editar algo de codigo.explicó el caso.

Tengo unos documentos txt de gcode(programación cnc) los cuales llevan diferentes líneas.
En cada línea lleva un código de grupo,por ejemplo un sería DMN_101. En medio de la línea.

Necesito eliminar completamente las líneas que contengan diversos códigos de estos que yo le asigne, y que el resto las dejé intactas, es decir, en el siguiente ejemplo:

Xxxxxxxxx DMN_101. Xxxxxxxxx
Xxxxxxxxx UAN_202 xxxxxxxxx
Xxxxxxxxx UIU_111 xxxxxxxxx
Xxxxxxxxx DMN_101xxxxxxxxx

Si yo quisiera eliminar las UAN_202 y UIU_111, simplemente me dejara las 2 líneas con DMN_101 y me creara otro txt con el nombre "FILTRADO (nombre original).txt) a poder ser


Espero haberme explicado, un saludo


« Última modificación: 26 Septiembre 2018, 22:53 pm por ramos_45 » En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.075



Ver Perfil
Re: ayuda con pequeño script
« Respuesta #1 en: 27 Septiembre 2018, 02:20 am »

Saludos,

- En la Command Line de Windows (cmd) puedes utilizar el comando FIND con el modificador /v para que imprima las líneas que NO contengan la palabra buscada, y opcionalmente utilizar /i para no distinguir mayúsculas de minúsculas:

Código
  1. copy con doc.txt
  2. Xxxxxxxxx DMN_101. Xxxxxxxxx
  3. Xxxxxxxxx UAN_202 xxxxxxxxx
  4. Xxxxxxxxx UIU_111 xxxxxxxxx
  5. Xxxxxxxxx DMN_101xxxxxxxxx^Z
  6.        1 archivo(s) copiado(s).
  7.  
  8. type doc.txt
  9. Xxxxxxxxx DMN_101. Xxxxxxxxx
  10. Xxxxxxxxx UAN_202 xxxxxxxxx
  11. Xxxxxxxxx UIU_111 xxxxxxxxx
  12. Xxxxxxxxx DMN_101xxxxxxxxx
  13.  
  14. find /v /i "UAN_202" doc.txt | find /v /i "UIU_111" > FILTRADO_doc.txt
  15.  
  16. type FILTRADO_doc.txt
  17.  
  18. ---------- DOC.TXT
  19. Xxxxxxxxx DMN_101. Xxxxxxxxx
  20. Xxxxxxxxx DMN_101xxxxxxxxx


En línea

nokia-6260

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: ayuda con pequeño script
« Respuesta #2 en: 27 Septiembre 2018, 02:41 am »

Así sin mirar mucho y con esto de aprender un poco de python hice este script , según mis pruebas funciona, aunque seguro que se puede hacer mil veces mejor.
Saludos.

#!/usr/bin/env python

file_r = open("Tu_home/sin_filtrar.txt",'r')
file_w = open("/Tu_home/filtrado.txt", 'w')

lines = file_r.readlines()

for i in lines:
    print(i)
    resul_UAN_202 = i.find('UAN_202')
    resul_UIU_111 = i.find('UIU_111')
    if ((resul_UAN_202 > 0) or  (resul_UIU_111 >0)):
        print("borrar")
    else:
        file_w.write(i)   
print(lines)       
En línea

animanegra

Desconectado Desconectado

Mensajes: 287



Ver Perfil
Re: ayuda con pequeño script
« Respuesta #3 en: 27 Septiembre 2018, 10:24 am »

Si es solo eliminar las lineas que cumplan un patron puedes tambien simplemente usar grep que para eso está:

Citar

cat fichero_de_entrada | grep -v "patron_a_quitar_1\|patron_a_quitar_2\|patron_a_quitar_3" > fichero_de_salida


Saludos.
En línea


42
No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.
ramos_45

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: ayuda con pequeño script
« Respuesta #4 en: 27 Septiembre 2018, 11:26 am »

Gracias por vuestras respuestas!

Saludos,

- En la Command Line de Windows (cmd) puedes utilizar el comando FIND con el modificador /v para que imprima las líneas que NO contengan la palabra buscada, y opcionalmente utilizar /i para no distinguir mayúsculas de minúsculas:

Código
  1. copy con doc.txt
  2. Xxxxxxxxx DMN_101. Xxxxxxxxx
  3. Xxxxxxxxx UAN_202 xxxxxxxxx
  4. Xxxxxxxxx UIU_111 xxxxxxxxx
  5. Xxxxxxxxx DMN_101xxxxxxxxx^Z
  6.        1 archivo(s) copiado(s).
  7.  
  8. type doc.txt
  9. Xxxxxxxxx DMN_101. Xxxxxxxxx
  10. Xxxxxxxxx UAN_202 xxxxxxxxx
  11. Xxxxxxxxx UIU_111 xxxxxxxxx
  12. Xxxxxxxxx DMN_101xxxxxxxxx
  13.  
  14. find /v /i "UAN_202" doc.txt | find /v /i "UIU_111" > FILTRADO_doc.txt
  15.  
  16. type FILTRADO_doc.txt
  17.  
  18. ---------- DOC.TXT
  19. Xxxxxxxxx DMN_101. Xxxxxxxxx
  20. Xxxxxxxxx DMN_101xxxxxxxxx


Entiendo que con ese codigo solo usarías las líneas 1,8,14y 16 no? El resto que pones es lo que respondería.

Los tengo muchos códigos que copiar para eliminar, unos 80,y posteriormente tal vez tenga que añadir más. Este script yo sabría modificarlo y añadirlos, pero lo van a usar otras personas que no. Habría la posibilidad de al inicio crear un menú que te pregunte si quieres añadir o quitar códigos?

Se podría simplificar la línea:
find /v /i "UAN_202" doc.txt | find /v /i "UIU_111" >

Para no tener que poner así los 80 códigos?

En línea

ramos_45

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: ayuda con pequeño script
« Respuesta #5 en: 27 Septiembre 2018, 11:28 am »

Así sin mirar mucho y con esto de aprender un poco de python hice este script , según mis pruebas funciona, aunque seguro que se puede hacer mil veces mejor.
Saludos.

#!/usr/bin/env python

file_r = open("Tu_home/sin_filtrar.txt",'r')
file_w = open("/Tu_home/filtrado.txt", 'w')

lines = file_r.readlines()

for i in lines:
    print(i)



    resul_UAN_202 = i.find('UAN_202')
    resul_UIU_111 = i.find('UIU_111')
    if ((resul_UAN_202 > 0) or  (resul_UIU_111 >0)):
        print("borrar")
    else:
        file_w.write(i)   
print(lines)       



Muchas gracias, yo creo que sí. En batch se crearlo, pero como lo copió y ejecutó para phyton?
En línea

ramos_45

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: ayuda con pequeño script
« Respuesta #6 en: 27 Septiembre 2018, 11:29 am »

Si es solo eliminar las lineas que cumplan un patron puedes tambien simplemente usar grep que para eso está:

Saludos.


Sería ideal pero lo necesito para Windows
En línea

ramos_45

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: ayuda con pequeño script
« Respuesta #7 en: 27 Septiembre 2018, 11:33 am »

Gracias por vuestras respuestas y vuestra ayuda.

Se podría añadir el documento arrastrando?

Se me a ocurrido otra opción que me ayudaría mucho, y sería resaltar en colores cuando encuentre diversas cosas. Por ejemplo:

Xxxxxxxxx DMN_101. XxxxxxM03xx
Xxxxxxxxx UAN_202 xxxxxxxxx
Xxxxxxxxx UIU_111 xxxxxxxxx
Xxxxxxxxx DMN_101xxxxxxM00xxx


Cuando encuentre M03, me lo pinte de verde y cuando encuentre M03 me lo pinte de rojo

Obviamente, tendría que ser en la consola, pero me gustaría también que exportará como hemos dicho antes(aunque aquí no pueda tener colores)
« Última modificación: 27 Septiembre 2018, 13:13 pm por ramos_45 » En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: ayuda con pequeño script
« Respuesta #8 en: 27 Septiembre 2018, 14:06 pm »

1) No hagas doble o mas post seguidamente, lee las reglas.




Se podría añadir el documento arrastrando?


Esto solo lo permite la CMD a partir de Windows 7. aquí te dejo un ejemplo:

Código
  1. @echo off
  2. goto menu
  3. :err
  4. echo Error :v . & pause & goto menu
  5.  
  6. :continue
  7. echo tu archivo es %op%
  8. pause & exit
  9.  
  10.  
  11. :menu
  12. cls
  13. echo/
  14. echo introduzca el directorio del archivo / o Arrastre.
  15. echo/
  16. set /p op= --------------- :
  17. if not defined op (goto:menu) >NUL
  18. if not exist %op% (goto:err) >NUL
  19. goto continue



Se me a ocurrido otra opción que me ayudaría mucho, y sería resaltar en colores cuando encuentre diversas cosas. Por ejemplo:

Xxxxxxxxx DMN_101. XxxxxxM03xx
Xxxxxxxxx UAN_202 xxxxxxxxx
Xxxxxxxxx UIU_111 xxxxxxxxx
Xxxxxxxxx DMN_101xxxxxxM00xxx


Cuando encuentre M03, me lo pinte de verde y cuando encuentre M03 me lo pinte de rojo


Ya esto no lo vas a lograr con batch.
« Última modificación: 27 Septiembre 2018, 14:42 pm por **Aincrad** » En línea



EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.075



Ver Perfil
Re: ayuda con pequeño script
« Respuesta #9 en: 27 Septiembre 2018, 17:06 pm »

- Gracias a FINDSTR puedes hacer uso de un fichero aparte que contenga todas las palabras que quieres filtrar:

Código
  1. C:\Users\EdSon\Desktop>type doc.txt
  2. Xxxxxxxxx DMN_101. Xxxxxxxxx
  3. Xxxxxxxxx UAN_202 xxxxxxxxx
  4. Xxxxxxxxx UIU_111 xxxxxxxxx
  5. Xxxxxxxxx DMN_101xxxxxxxxx
  6.  
  7. C:\Users\EdSon\Desktop>type filtro.txt
  8. UAN_202
  9. UIU_111
  10.  
  11. C:\Users\EdSon\Desktop>findstr /v /i /g:filtro.txt doc.txt
  12. Xxxxxxxxx DMN_101. Xxxxxxxxx
  13. Xxxxxxxxx DMN_101xxxxxxxxx



- Puedes crear un fichero .bat (o .cmd) para utilizar el código que ha compartido **Aincrad** y en lugar de poner:

Código
  1. echo tu archivo es %op%

-- pondrías:

Código
  1. findstr /v /i /g:filtro.txt %op% > FILTRADO_%op%

-- No te olvides del fichero filtro.txt donde están las palabras a filtrar. Si el script encuentra dicha palabra en una línea elimina toda esa línea.



- Colorear en CMD si es posible pero no muy práctico, se puede utilizar el mismo FINDSTR con el modificador /A, el detalle es que solo colorea los nombres de los ficheros que contienen la palabra a buscar, por ende se tendría que crear tantos ficheros como líneas haya en tu fichero doc.txt

En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda] Crear pequeño script en VB
Programación Visual Basic
polmp 1 1,984 Último mensaje 9 Mayo 2009, 22:16 pm
por BlackZeroX
Ayuda con pequeño script en php
PHP
Cergath 4 3,004 Último mensaje 16 Mayo 2010, 18:42 pm
por Cergath
[Shell script] Un pequeño script para ver temperaturas.
Scripting
manute_powa 3 5,668 Último mensaje 7 Enero 2012, 02:18 am
por manute_powa
pequeño script de automatizacion
Scripting
crisoof 5 4,380 Último mensaje 23 Noviembre 2016, 21:40 pm
por engel lex
Ayuda para crear un pequeño script
Programación General
0x22 5 4,344 Último mensaje 17 Diciembre 2021, 06:07 am
por 0x22
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines