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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Script para buscar datos en un .txt
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Script para buscar datos en un .txt  (Leído 9,552 veces)
chulas2106

Desconectado Desconectado

Mensajes: 52


Ver Perfil
Script para buscar datos en un .txt
« en: 14 Enero 2015, 13:10 pm »

Hola, lo que pasa es que me han contratado en la administracion de un centro de dialisis, y muy a menudo me piden informacion de pacientes que no conozco y tengo que abrir un cuaderno y buscarlos, eso es MUY tedioso.... lo que hice fue agarrar un archivo .xlsx (excel hecho en windows) de la empresa y pasar la informacion a un archivo .txt, la acomode porque al copiarla de un excel sale toda desordenada  ("acomodar" es 15min tabulando) yla pase a mi notbook personal, donde tengo un script en bash que lo que hace es simplemente pedir el nombre del fichero y la palabra/frase a buscar y lo busca por medio del comando grep... el script funciona, el problema es que como son muchos datos en una sola linea la terminal los imprime en 2 y queda, por ejemplo la direccion en dos lineas, mi preunta es si hay alguna forma de hacer que se muestre toda la informacion en una sola liena...
Otra cosa que me seria muy util es poder mostrar "nombres de columnas" osea que el resultado sea algo parecido a esto:
NOMBRE                       DOMICILIO                          TELEFONO                ETC
señor x                          calle falsa 123                     7578592945         rg
señora y                        calle hola 456                      135068y358           ryr

Por si sirve de algo aqui va el codigo
Código:
#!/bin/bash
#Este es una prueba de un script para buscar datos en una lista
#escrita en un archivo de texto...
clear
read -p "Indique el archivo a analizar..." txt
echo Usted ha indicado el fichero $txt ...

read -p "Que desea buscar en el fichero? " dat
echo Procediendo a buscar $dat en $txt
grep $dat /root/Downloads/$txt


En línea

Black Dragon

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Script para buscar datos en un .txt
« Respuesta #1 en: 14 Enero 2015, 14:26 pm »

Si tienes un XLS o un XLSX puedes guardarlo como un CSV (Coma Separated Values).
Básicamente es un archivo de texto en el que separa los valores con comas y las filas por lineas en el archivo.
Asegúrate que se guarda como UTF-8 y con los saltos de linea de linux. Si no fuese así ábrelo en tu editor de texto favorito y guárdalo como tal.

El grep a mi me da justo lo que pones en la tabla. Lo mas probable es que fuese problema de los saltos de linea que comenté antes.

Para intercambiar las "," por \t con un sed es bastante sencillo de hacer.
La primera fila se puede sacar con un head -n1 archivo.csv y aplicarle un sed como antes.

Yo interpreto la entrada como:
entrada.csv:
Código:
"NOMBRE","DOMICILIO","TELEFONO","ETC"
"señor x","calle falsa 123",7578592945,"rg"
"señora y","calle hola 456",135068345358,"ryr"
"señ z y","calle sdfa 456",1353453358,"rsdfsdfr"
"seaaa x a e","calsgfdgh hola 456",135068358,"rqasdyr"

El código en bash editando un pelin el tuyo me quedará como
Código
  1. #!/bin/bash
  2. #Este es una prueba de un script para buscar datos en una lista
  3. #escrita en un archivo de texto...
  4. clear
  5. txt="entrada.csv"
  6. #read -p "Indique el archivo a analizar..." txt
  7. echo Usted ha indicado el fichero $txt ...
  8.  
  9. #read -p "Que desea buscar en el fichero? " dat
  10. dat="x"
  11. echo "Procediendo a buscar $dat en $txt"
  12. head -n1 $txt |sed "s/,/\t/g"|sed "s/\"//g"
  13. grep $dat $txt|sed "s/,/\t/g"

Solo he editado las entradas un pelin, agregado los sed y el head.

El primer problema que le encuentro a mi script es que depende mucho del tamaño de los campos de texto y lo mas probable es que aparezcan en columnas distintas y el texto se mueva de su "sitio". Así que se necesitaría hacer de alguna forma dinámica la colocación de las tabulaciones. Pero ahora no tengo mucho tiempo para ello.

Quizá lo he entendido todo mal! jeje espero almenos haber ayudado en algo! ^^.
Un saludo


En línea

vk496

Desconectado Desconectado

Mensajes: 205


Ver Perfil
Re: Script para buscar datos en un .txt
« Respuesta #2 en: 14 Enero 2015, 15:31 pm »

Cuando hay separaciones irregulares (tabulaciones y espacios), recomiendo usar awk

Por ejemplo, si tienes un archivo así, puedes hacer esto:

cat miarchivo.txt | awk '{print $1,$2,$3,$4}'

Esto "regularizaria" esos separadores. Espero haberte dado ideas

Salu2
En línea

chulas2106

Desconectado Desconectado

Mensajes: 52


Ver Perfil
Re: Script para buscar datos en un .txt
« Respuesta #3 en: 14 Enero 2015, 15:50 pm »

BlackDragon Gracias por tu respuesta!!! lo del head me sirvio, ahora se ven los nombres en las columnas, y he llegado a la conclusion de que el desorden de los datos es debido al tamaño de mi pantalla (olvide mencionar que estoy en una netbook jeje) asique ya voy a probar en un monitor mas grande para ver si asi funciona...

vk496 No entendi lo que pusiste podrias explicarlo??
En línea

Black Dragon

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Script para buscar datos en un .txt
« Respuesta #4 en: 14 Enero 2015, 16:16 pm »

Lo que comenta vk496 es que se puede formatear de forma sencilla usando awk.
He hecho varias pruebas y esto es lo que he sacado con awk.
Debes tener en cuenta el tamaño máximo de cada valor de la tabla. Asi pues yo he deducido al alza que el nombre no debería exceder los 35 caracteres, el domicilio los 35 caracteres me parece tb bien, el teléfono unos 9 o 10 caracteres por si las moscas le puse 12 y el etc a saber, te toca a ti.
Intenta mirar otros tipos de resultados dependiendo de tus valores en el csv.

Usando el comando awk como
Código
  1. head -n1 entrada.csv|awk -F, '{printf "%-35s\t%-35s\t%-10s\t%-35s\n",  $1, $2, $3, $4}'|sed "s/\"//g"

En este caso cogemos la primera linea del archivo entrada.csv y se lo pasamos a awk que detecta la separación de las comas con -F, y luego imprime las 4 primeras columnas de la forma en la que le dice el printf. El primero %-35s significa que pilla $1 y lo usa como string y le pone al final los necesarios espacios hasta llegar a 35 caracteres. Si se excede pues no pone nada.
El resto de parámetros es lo mismo. El único problema es que necesitas una pantalla grandecita para poder ver contenido real. Un nombre puede ser muy largo y no solo un "asds".
Luego el sed quita los ".

asi que en general creo que se puede usar algo como:
Código
  1. head -n1 entrada.csv|awk -F, '{printf "%-35s\t%-35s\t%-10s\t%-35s\n",  $1, $2, $3, $4}'|sed "s/\"//g"
  2. grep $dat $txt|awk -F, '{printf "%-35s\t%-35s\t%-10s\t%-35s\n",  $1, $2, $3, $4}'|sed "s/\"//g"

Supongo que ajustarlo es cosa tuya.
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Script para buscar datos en un .txt
« Respuesta #5 en: 14 Enero 2015, 16:49 pm »

Me gusta la idea de AWK para formatear tu CSV:

Código
  1. awk 'BEGIN {FS=","}{ printf "%-50s %-50s %s\n",$1,$2,$3}' archivo.csv

Código
  1. TestA,calle rosas,100
  2. TestB,calle tierra,101
  3. TestC,calle nunu,102

Resultado:



Y esto lo puedes hacer una funcion de bash facilmente, en tu .bashrc:

Código
  1. function despliegaLista {
  2.  awk 'BEGIN {FS=","}{ printf "%-50s %-50s %s\n",$1,$2,$3}' $1
  3. }

Y si quieres buscar solo haces:
Código
  1. despliegaLista archivo.csv | grep "Busqueda aqui"
« Última modificación: 14 Enero 2015, 16:57 pm por MinusFour » En línea

el-brujo
ehn
***
Desconectado Desconectado

Mensajes: 21.641


La libertad no se suplica, se conquista


Ver Perfil WWW
Re: Script para buscar datos en un .txt
« Respuesta #6 en: 14 Enero 2015, 17:33 pm »

¡oh! el foro ya parece stackoverflow.com hehehe  :D

También puedes usar Notepad++ o SublimeText para hacer búsquedas complejas en Windows, con expresiones regulares.

Manual Notepad++: ejemplos de uso plugin TextFX
http://blog.elhacker.net/2014/10/manual-tutorial-notepad-plus-plus-bloc-de-notas-textfx-plugin.html
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Script para buscar datos en un .txt
« Respuesta #7 en: 15 Enero 2015, 03:14 am »

¡oh! el foro ya parece stackoverflow.com hehehe  :D
Este es el ambiente que me gusta a mi en el foro, jaja!, que siga así.



Como ha comentado el compañero, señor, amo, y todo poderoso @el-brujo, una solución simple y sencilla sería utilizar Sublime Text + RegEx,
es a lo que yo suelo recurrir debido a los beneficios que ofrece un editor de texto, por lo manejable que es una GUI, ya que puedes hacer correcciones o modificaciones, rehacer y deshacer en tiempo reeal y ver las capturas del RegEx practicamente al instante, es mucho mejor que utilizar SED o herramientas parecidas commandline y el tiempo de espera que ello supone, ¡donde va a parar! ...a menos que tu propósito sea automatizar la tarea sin interacción del usuario, claro está.

(el problema sería reproducir la funcinalidad de una aplicación como head/tail, quizás exista una opción en Sublme Text o algún plugin de terceros)

Saludos!
« Última modificación: 15 Enero 2015, 03:18 am por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda] Script en php para buscar en la base de datos
PHP
polmp 5 5,871 Último mensaje 27 Febrero 2009, 17:10 pm
por & eDu &
Manejar archivo .txt desde java (ingresar datos, modificar datos, buscar datos y
Java
chuystoty 9 106,470 Último mensaje 20 Mayo 2012, 06:13 am
por ELMED
[Batch] [vbs] ¿Un script para buscar archivos de cero bytes?
Scripting
SuperDraco 0 4,737 Último mensaje 13 Mayo 2011, 20:09 pm
por SuperDraco
hacer script vbs para copiar datos a usb
Scripting
daniwxp11 6 8,164 Último mensaje 7 Mayo 2013, 05:03 am
por KMakoto
necesito un programa para buscar dentro de una base de datos
Foro Libre
BK201 1 3,041 Último mensaje 21 Mayo 2012, 02:16 am
por m0rf
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines