miércoles, noviembre 16, 2011

Comandos *nix para archivos de texto

Hace poco me enfrenté al siguiente problema, una aplicación desarrollada para una importante empresa internacional de confites realiza una descarga de información desde una base de datos. Ya que el desarrollo fue ad-hok, los archivos de descarga inicial de datos quedaban con líneas en blanco cada ciertos intervalos. Esto se generaba ya que estos archivos son resultado de una concatenación de consultas parciales más pequeñas.
Ya que los colegas manifestaron una ineptitud imposibilidad informática (ni les explico mi cara, mi respuesta, y mi indignación al respecto) para eliminar las líneas en blanco, el problema debí resolverlo yo.

Esto es plataforma Ms Windows, utilizando las GNU Utils, que son herramientas de línea de comandos para *nix (Unix y Linux, en sus diversos sabores).
Cualquiera de estos enlaces les sirve:


Cuento corto, terminé haciendo una llamada a un .bat con el comando sed:
@echo Limpiando archivosed.exe "/^$/d" %1 > %1.delete@exit 1 

De aquí vamos a desprender algunos comandos relevantes:

  • sed.exe "/^$/d" archivo > archivo2sirve para eliminar las líneas en blanco del archivo. Los que tengan algún tipo de familiaridad con vi (el editor de textos para hombres en *nix), o con expresiones regulares, reconocerán el patrón:
    • ^$cadena que empieza y termina inmediatamente (^ empieza, $ termina), sin nada entremedio. Esto es una línea vacía (sólo por si no lo hubieran notado)
    • /ddelete, ie borrar, es decir borra la línea (¡BRILLANTE! no se cómo no me han llevado los rusos)
    • archivo > archivo2 : le indica al comando que opere sobre archivo y redirija los resultados a archivo2. Si archivo2 existiera previamente, este será sobreescrito.
  • wc -l archivo : Cuenta el total de líneas de un archivo de texto
  • grep -c "^$" archivo : cuenta las líneas vacías que hay dentro del archivo.
Y cualquier duda al respecto pueden revisar los manuales de cada comando (con man comando (nótese man de manual)), o la ayuda correspondiente con comando --help ó comando -h . Incluso hay veces que ejecutar el comando sin parámetros da un pincelazo de como se usa cada instrucción.


No hay comentarios.: