Acompáñanos a lo largo de este breve artículo donde descubriremos cómo eliminar líneas en blanco mediante un script GNU/Linux.
AWK es uno de los lenguajes de programación más usados en el mundo UNIX para el procesamiento de texto, y es uno de los recursos obligatorios que se deben dominar cuando se está dentro de este mundo.
El nombre está compuesto por las iniciales de sus creadores, que sin duda conocerás de otros proyectos, al menos si estás familiarizado con el mundo UNIX y el del software libre:
- A: Alfred Aho.
- W: Peter Weinberger.
- K: Brian Kernighan.
AWK se suele usar junto a SED, un editor de línea de comandos que recibe su nombre de su capacidad de trabajar como editor en línea, ya que sería su traducción directa al inglés “stream editor”.
SED permite realizar operaciones de edición con datos extraídos de archivos o desde la entrada de datos estándar (standard input o stin). Otro de los puntos a destacar es que se trabaja en modo no interactivo.
La potencia de ambas herramientas se multiplica cuando se usan ambas en conjunción, ya que
Como curiosidad, AWK y SED son la fuente original de inspiración para la creación de uno de los lenguajes de scripting más potentes y ampliamente usados: Perl, ya que Larry Wall se fundamentó en estos para la creación de su potente lenguaje de programación, del que me declaro acérrimo fan, aunque he de reconocer que un fan bastante torpe.
Para encontrar el número de líneas en blanco en un archivo, usa el siguiente comando:
# cat <fichero_origen> |awk ‘/^$/ { ++x } END { print «Numero de lineas en blanco = » x }’
Donde:
- Cat: es el comando usado para mostrar el contenido de un fichero de manera concatenada, o sea, de principio a fin del archivo, sin detenerse en ningún momento. Si se quiere poder ir paso a paso, viendo el contenido por páginas, se deberán usar alternativas como el comando “more” o “less”.
- <fichero_origen>: representa al fichero de texto a revisar, este será básicamente la entrada del comando.
- |: Es la tubería (pipe) usada para pasar la salida de un comando a la entrada del siguiente.
- awk:
- /^$/ { ++x }: Representa un contador en el que cada vez que se encuentra una línea vacía representada por /^$/ se suma uno { ++x }.
- { print «Numero de líneas en blanco = » x }: Imprime por pantalla (salida estándar o stout) el mensaje “Numero de líneas en blanco” junto con el número contacto por el comando y representado aquí por la variable “x”.
Un ejemplo de esta ejecución podría ser:
# cat ficheroprueba.txt |awk ‘/^$/ { ++x } END { print «Numero de lineas en blanco = » x }’
Tal como podemos ver en la siguiente captura.
Con esto ya tendríamos claro el número de líneas en blanco, que lo podríamos confrontar con el número total de líneas para saber que porcentaje del fichero está poblado y que porcentaje no, para extraer diversas conclusiones y poder tratarlo de múltiples formas.
Una de las formas en que podríamos tratarlo es limpiando las líneas en blanco mediante el uso de AWK, así seguimos usando la misma herramienta que antes y no introducimos complejidad adicional.
La forma de usar este comando es muy sencilla, a la par que “ingeniosa”; y es usando el reenvío de aquellas líneas que contengan algún contenido, purgando aquellas que no tengan contenido, usando para ello el modificador “NF”.
Esto se usaría de la siguiente manera:
# awk ‘NF’ <fichero_origen> > <fichero_destino>
Donde:
- ‘NF’: Tomamos solo las líneas que tienen contenido.
- >: Reenvía la salida del comando al archivo “ficherosalida.txt”.
Un ejemplo de esto sería:
# awk ‘NF’ ficheroprueba.txt > ficherosalida.txt
Si queremos buscar más opciones, podríamos usar también el comando SED que es otro de los viejos conocidos de administradores de GNU/Linux y UNIX.
En este caso se puede ejecutar el siguiente comando:
# sed ‘/^$/d’ <fichero_origen> > <fichero_destino>
Donde:
- ‘/^$/d’: Busca las líneas en blanco y las elimina.
- >: Hace el reenvío de la salida del primer comando al archivo “ficherocambiado.txt”, escribiendo el contenido dentro de este.
Siendo un ejemplo:
# sed ‘/^$/d’ ficheroprueba.txt > ficherocambiado.txt
Como curiosidad, si retiráramos el reenvío a otro archivo, lo que sucedería es que se mostraría el fichero sin los espacios en blanco, pero el fichero seguiría intacto.
Para ello deberíamos lanzar el siguiente comando:
# sed ‘/^$/d’ <fichero_origen>
Siendo el ejemplo:
# sed ‘/^$/d’ ficheroprueba.txt
Y con esto ya podemos decir que hemos repasado este tema más o menos en profundidad.
Conclusiones:
Como puedes ver en el artículo cómo eliminar líneas en blanco mediante un script GNU/Linux, con un par de comandos enlazados y reconducidos se puede obtener el número de líneas en blanco que se tiene en un fichero, que puede ser una información muy útil cuando operamos con ficheros de configuración.
La ejecución es sencilla y debería estar soportada por todos los sistemas GNU/Linux ya que se realiza mediante AWK, una herramienta ampliamente difundida dentro de los sistemas GNU/Linux y UNIX, pero si encontraras algún problema en su ejecución puedes contactar con nosotros para que intentemos echarte una mano.
Asimismo, recuerda que tienes nuestros tutoriales disponibles para tu consulta en el blog de Jotelulu.
¡Gracias por leernos!