Coreutils tac: Output de archivos completos (parte 2)

tac:  Es un comando de GNU Core Utilities (coreutils) que permite copiar el contenido de uno varios archivos en orden inverso y mostrarlo en el «Standard Output»

Coreutils – Output de archivos completos, seguimos con tac

Coreutils – Output de archivos completos, seguimos con tac

 

Ya es lunes de nuevo y lo prometido es deuda :D, otra publicación más sobre GNU Core Utilities, en el artículo anterior hablamos sobre cat, puedes volver a visitarlo aquí:  Coreutils cat: Output de archivos completos (parte 1), si no lo leiste corre a leerlo, te espero…. ¿ya?…  ¡genial!.
Bien, esta ocasión hablaremos sobre el mellizo malvado de cat… tac !!! bueno quizás no sean tan mellizos ni tan malvados :P.

Friends S06E17: Joey y Carl, no son tan identicos

Friends S06E17: Joey y Carl, no son tan idénticos

 

Ya fuera de bromas y referencias a friends :P

 

¿Qué es tac?

tac, al igual que cat copia el contenido de un archivo y lo despliega en el “Standard Output”, sin embargo lo hace de forma inversa.

Coreutils cat – Cheatsheet

Coreutils cat – Cheatsheet

 

Wait… What?… Si, tac por default comienza a mostrar primero la última línea y al final la primera línea.  Para los ejemplo utilizaremos el siguiente archivo:  ejemplo-104

Bien.. primero revisemos qué contiene  el archivo, ¿cómo? vamos a  usar el comando cat!!! :D.

gabriel@gultij:~/Gultij/Coreutils/files$ cat ejemplo-104.txt  
Esto es un archivo normal... 
 
común y corriente... 
 
no pasa nada nada por aquí, ni nada por allá 
 
hasta que ... 
 
wingardium leviosa 
 
wait.. what? 
 
vamos a ver que pasa despues de ese momento extraño 
 
creo que ya es suficiente

Ahora veamos el mismo archivo utilizando tac

gabriel@gultij:~/Gultij/Coreutils/files$  tac ejemplo-104.txt  
creo que ya es suficiente 
 
vamos a ver que pasa despues de ese momento extraño 
 
wait.. what? 
 
wingardium leviosa 
 
hasta que ... 
 
no pasa nada nada por aquí, ni nada por allá 
 
común y corriente... 
 
Esto es un archivo normal...

:o Está al revés !!!! Eso es… poco útil :(.  Claro, podría parecer que tac es un comando inútil, pero hay ciertos escenarios en los que quisieras leer un archivo comenzando por la última línea, por ejemplo un log de errores y quieres comenzar por el error más reciente. ;)

¿No tiene opciones el comando?

Si, claro que tiene opciones, y como es usual pueden consultarlas con la opción «–help».

gabriel@gultij:~/Gultij/Coreutils/files$ tac --help
Usage: tac [OPTION]... [FILE]...
Write each FILE to standard output, last line first.

With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
-b, --before             attach the separator before instead of after
-r, --regex              interpret the separator as a regular expression
-s, --separator=STRING   use STRING as the separator instead of newline
--help     display this help and exit
--version  output version information and exit

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/tac>
or available locally via: info '(coreutils) tac invocation'

Honestamente me es un poco complicado encontrar ejemplo útiles para las opciones del comando tac, así que utilizaré ejemplo inútiles y dejaré que ustedes le encuentren utilidad xD.

Opción -s  ó –separator

gabriel@gultij:~/Gultij/Coreutils/files$ tac -s "wingardium leviosa" ejemplo-104.txt.
 
 
wait.. what? 
 
vamos a ver que pasa despues de ese momento extraño 
 
creo que ya es suficiente 
Esto es un archivo normal... 
 
común y corriente... 
 
no pasa nada nada por aquí, ni nada por allá
 
hasta que ... 
 
wingardium leviosa

OMG !!!  no sé para qué sirve eso en el mundo real, pero después de definir una cadena «wingardium leviosa» se convirtió en el separador, esto quiere decir que en lugar de invertir todas las líneas, el archivo comienza a invertirse desde el momento en que encuentra el separador y podemos ver que el separador es procesado hasta el final.

Opción -b  ó –before

gabriel@gultij:~/Gultij/Coreutils/files$ tac -b -s "wingardium leviosa" ejemplo-104.txt                          
wingardium leviosa 
 
wait.. what? 
 
vamos a ver que pasa despues de ese momento extraño 
 
creo que ya es suficiente 
Esto es un archivo normal... 
 
común y corriente... 
 
no pasa nada nada por aquí, ni nada por allá 
 
hasta que ...

Si usamos la opción «-b» el separador es procesado antes y en lugar de mostrarlo al final, lo muestra al principio.

Opción -r  ó –regex

gabriel@gultij:~/Gultij/Coreutils/files$ tac -b -r -s "^win" ejemplo-104.txt  
wingardium leviosa 
 
wait.. what? 
 
vamos a ver que pasa despues de ese momento extraño 
 
creo que ya es suficiente 
Esto es un archivo normal... 
 
común y corriente... 
 
no pasa nada nada por aquí, ni nada por allá
 
hasta que ...

Finalmente la opción «-r» nos permite utilizar una expresión regular como separador en lugar de una cadena regular.

Concurso

Debo admitir que estos son los ejemplo más ridículos que pude haber imaginado, pero estoy seguro que ustedes podrán encontrar cosas mucho más ingeniosas, de hecho, a la persona que nos diga en la sección de comentarios el ejemplo más ingenioso de tac utilizando TODAS SUS OPCIONES le vamos a obsequiar una playera del Gultij.

Ya mandamos pedir las playeras con el siguiente «diseño»

Diseño para playera del Gultij

«Diseño» para playera del Gultij

Nombraremos al ganador durante la próxima publicación de la serie, todos pueden participar.

Eso es todo por hoy, espero que les sea de mucha utilidad estas publicaciones, no dejen de comentar si les gusto y como siempre, háganos saber en qué podemos mejorar.

 

Hasta la próxima :D.

Esta entrada fue publicada en coreutils el por .

Acerca de Gabriel Covarrubias

Soy ingeniero en C4 Technologies, me uní al Gulij en 2013 y ya no sé cómo salir aquí xD, me gusta salir con mi perro Max que es una celebridad en redes sociales, uso Debian después de recorrer 416,000 distros diferentes a lo largo de 11 años .... y dice mi esposa que debo decir que soy felizmente casado :P.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *