Autor
|
Tema: Script para buscar datos en un .txt (Leído 9,479 veces)
|
chulas2106
Desconectado
Mensajes: 52
|
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 #!/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
Mensajes: 6
|
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: "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 #!/bin/bash #Este es una prueba de un script para buscar datos en una lista #escrita en un archivo de texto... clear txt="entrada.csv" #read -p "Indique el archivo a analizar..." txt echo Usted ha indicado el fichero $txt ... #read -p "Que desea buscar en el fichero? " dat dat="x" echo "Procediendo a buscar $dat en $txt" head -n1 $txt |sed "s/,/\t/g"|sed "s/\"//g" 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
Mensajes: 205
|
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
Mensajes: 52
|
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
Mensajes: 6
|
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 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: head -n1 entrada.csv|awk -F, '{printf "%-35s\t%-35s\t%-10s\t%-35s\n", $1, $2, $3, $4}'|sed "s/\"//g" 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
|
Me gusta la idea de AWK para formatear tu CSV: awk 'BEGIN {FS=","}{ printf "%-50s %-50s %s\n",$1,$2,$3}' archivo.csv
TestA,calle rosas,100 TestB,calle tierra,101 TestC,calle nunu,102
Resultado: Y esto lo puedes hacer una funcion de bash facilmente, en tu .bashrc: function despliegaLista { awk 'BEGIN {FS=","}{ printf "%-50s %-50s %s\n",$1,$2,$3}' $1 }
Y si quieres buscar solo haces: despliegaLista archivo.csv | grep "Busqueda aqui"
|
|
« Última modificación: 14 Enero 2015, 16:57 pm por MinusFour »
|
En línea
|
|
|
|
|
Eleкtro
Ex-Staff
Conectado
Mensajes: 9.878
|
¡oh! el foro ya parece stackoverflow.com hehehe 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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Ayuda] Script en php para buscar en la base de datos
PHP
|
polmp
|
5
|
5,861
|
27 Febrero 2009, 17:10 pm
por & eDu &
|
|
|
Manejar archivo .txt desde java (ingresar datos, modificar datos, buscar datos y
Java
|
chuystoty
|
9
|
106,388
|
20 Mayo 2012, 06:13 am
por ELMED
|
|
|
[Batch] [vbs] ¿Un script para buscar archivos de cero bytes?
Scripting
|
SuperDraco
|
0
|
4,714
|
13 Mayo 2011, 20:09 pm
por SuperDraco
|
|
|
hacer script vbs para copiar datos a usb
Scripting
|
daniwxp11
|
6
|
8,119
|
7 Mayo 2013, 05:03 am
por KMakoto
|
|
|
necesito un programa para buscar dentro de una base de datos
Foro Libre
|
BK201
|
1
|
2,989
|
21 Mayo 2012, 02:16 am
por m0rf
|
|