
“Un par de comandos vale mas que unos clics”.
El caso que les voy a presentar es real y me sucedió hace poco.
Caso de estudio
Sujeto:Mi Hermano
Titulo Universitario:Contador Publico Nacional
Problema: Filtrar una base de datos para obtener los datos de ciertos Contribuyentes
Herramientas con la que trabaja:
Maquina: PC Clone Atholon XP+2000 512 MB ram Dico 20GB
SO: Windows 2000
Office 2000
Base de datos a filtrar: SELE-SAL-CONSTA.p20out1.20060925.tmp
Tamaño de archivo: Muy grande
Composición del archivo: texto plano con 10 campos de longitud fija
Primer intento por parte de mi hermano:
Abrir el archivo con el notepad:
Resultado: CPU 100%, luego de unos minutos se agotó la memoria física de la maquina, imposible matar el proceso. Tuvo que bootear el equipo.
Segundo intento:
Tratar de importar la base al excel:
Resultado: Luego de unos cuantos minutos, el excel no pudo seguir importando debido al limite de cantidad de filas del mismo.
Tercer intento:
Tratar de importarlo al Access:
Resultado: Tardo una eternidad el proceso, demasiado consumo de CPU y memoria, querys casi imposibles de realizar debido a la lentitud del proceso.
Cansado de los resultados me pasa el archivo a mi para que lo analice y trate de sacar los resultados que necesitaba:
Equipo a utilizar: Notebook Packard Bell Easy note, Semprom Mobile +2800, 256mb RAM, 50GB disco.
SO: Distro linux que no viene al caso comentar
Herramientas a utilizar: Consola Bash
Primer acercamiento:
Analicemos el archivo
sebastian@Xunilda:~$ ls -al SELE-SAL-CONSTA.p20out1.20060925.tmp
-rw-rw-rw- 1 sebastian sebastian 173746151 2006-09-25 08:47 SELE-SAL-CONSTA.p20out1.20060925.tmp
sebastian@Xunilda:~$
Epa que pesado es ese archivo: 173746151 bytes (uau! 165,7 MB aprox)
Veamos cuantos registros:
sebastian@Xunilda:~$ wc -l SELE-SAL-CONSTA.p20out1.20060925.tmp
3491351 SELE-SAL-CONSTA.p20out1.20060925.tmp
sebastian@Xunilda:~$
Con el comando wc -l [archivo] lo que estamos haciendo es contar las lineas que contiene el mismo.
Como resultado obtenemos 3491351 por lo tanto tenemos esa cantidad de contribuyentes. Una cantidad de registros difícil de manejar con un simple excel o access.
Ahora vamos a realizar un filtro:
1-A mi hermano le interesaba filtrar los laboratorios
sebastian@Xunilda:~$ cat SELE-SAL-CONSTA.p20out1.20060925.tmp | grep LABORATORIO > resultado.txt
sebastian@Xunilda:~$
Con esto obtuvimos un archivo resultado.txt con todos los Laboratorios mucho mas manejable.
Veamos el tiempo que me tomo realizar dicho filtro:
sebastian@Xunilda:~$ time cat SELE-SAL-CONSTA.p20out1.20060925.tmp | grep LABORATORIO > resultado.txt
real 0m0.984s
user 0m0.309s
sys 0m0.579s
sebastian@Xunilda:~$
Una luz contrastado contra la eternidad de importación del Access.
2-Mi hermano es muy pretencioso y también quería ordenar por cuit el archivo:
sebastian@Xunilda:~$ sort resultado.txt -o resultado_ordenado.txt
sebastian@Xunilda:~$
De esta forma obtenemos el archivo resultado_ordenado.txt ordenado por cuit de menor a mayor que es el primer campo como lo quería el.
3-Si bien ya tenia la info que necesitaba también quería saber el total de laboratorios registrados
Hay dos caminos, o bien hacer un wc sobre el resultado o hacerlo sobre el archivo original, yo elijo hacerlo nuevamente sobre el archivo principal para que vean que se puede hacer con una sola instrucción:
sebastian@Xunilda:~$ cat SELE-SAL-CONSTA.p20out1.20060925.tmp | grep LABORATORIO | wc -l
802
sebastian@Xunilda:~$
Nos esta diciendo que hay 802 Laboratorios registrados.
Veamos los tiempos utilizados en cada caso:
sebastian@Xunilda:~$ time sort resultado.txt -o resultado_ordenado.txt
real 0m0.016s
user 0m0.013s
sys 0m0.003s
sebastian@Xunilda:~$
sebastian@Xunilda:~$ time cat SELE-SAL-CONSTA.p20out1.20060925.tmp | grep LABORATORIO|wc -l
802
real 0m1.191s
user 0m0.349s
sys 0m0.567s
sebastian@Xunilda:~$
Conclusión:
Con esto concluimos que la consola de un *nix es muchísimo mas potente que cualquier sistema de ventanas. Si bien no es bonito ni se ve bien, no es muy complicado aprender a manejarse en ella.
Con simples comandos obtendremos resultados rápidos, precisos y sin tanto consumo de CPU. Tengan en cuenta que lo expuesto se podría haber realizado con un equipo muchísimo mas humilde con escaso tiempo de diferencia en la obtención del resultado.
La próxima vez que alguien les diga “para que la consola?” o “la linea de comandos no sirve” o “en Windows son dos clics y es mas lindo” ya saben que contestar.
Para el que quiera profundizar con Bash les recomiendo el siguiente link:
http://www.insflug.org/COMOs/Bash-Prog-Intro-COMO/Bash-Prog-Intro-COMO.html
ESTE TEXTO SE PUBLICA BAJO LICENCIA CREATIVE COMMONS BY-NC-SA 2.5 AR.
Por lo tanto, usted es libre de: 1) Copiarlo, distribuirlo y exhibirlo. 2) Hacer obras derivadas. Bajo las siguientes condiciones: 1) Debe dar atribución mencionando el nombre del autor y del LUG Zona Norte. En caso de las notas que no llevan firma, mencionar sólo el nombre del LUG.
2) Usted no puede usar esta obra con fines comerciales. 3) Si usted altera, transforma, o crea sobre este texto, sólo podrá distribuir la obra derivada resultante bajo una licencia idéntica a ésta.
Más detalles y texto legal de la licencia en: http://creativecommons.org/licenses/by-nc-sa/2.5/ar

#1 by Sultanovich on 04/02/2007 - 10:31
inplacable la nota, igual creo: No tendrias que haberlo comparado con D.O.S. para que quede mas claro?. Porque tambien habria una diferencia total, pero estas comparando un entorno grafico con una consola.
Saludos.
#2 by sechole on 05/02/2007 - 1:23
Justamente. La mayoria que hace?. Trata de levantarlo con lo que tiene a mano sin pensar, dandole clic a todo lo que encuentra (notepad, wordpad, MS Word, etc) por eso el slogan “Un par de comandos vale mas que unos clics”.
Con el DOS…….mmmm…..sabemos que la linea de comandos de los productos de MS son bastante incompletos.
#3 by Sultanovich on 10/02/2007 - 17:19
claro, eso seguro. Pero para que queda mas claro, digo yo, me parece que con el lo tendrias que haber comparado. Pero es verdad lo que vos decis, que seguramente mas de una querra abrir un archivo xxx.dat de 25 Mb con el notepad sin dudarlo.
Saludos