Linux / Comando tac: mostrar líneas y registros en orden inverso

tac imprime los registros de un archivo desde el último hasta el primero. El delimitador de registros predeterminado es un salto de línea, por lo que se puede usar para revisar primero las entradas recientes del registro o invertir el orden de las líneas.

En este artículo se explica la sintaxis básica de tac, sus principales opciones, ejemplos de uso real, diferencias con comandos relacionados y precauciones al usarlo.

El comando, cuyo nombre es cat escrito al revés, invierte el orden de los registros delimitados, no los bytes del archivo. Si se especifican varios archivos, cada archivo se procesa en orden, pero los registros dentro de cada archivo se imprimen en orden inverso.

Sintaxis básica

tac [OPCIONES] [ARCHIVO ...]

Las opciones y el comportamiento detallado pueden variar según la implementación y la versión. En el sistema actual, consulte la descripción de los comandos instalados como tac --help y man tac.

Uso básico de tac

Invertir orden de líneas

La última línea se imprime primero.

tac events.log

Procesar varios archivos

El contenido dentro de cada archivo se invierte en orden, y el orden de los argumentos de archivo se mantiene.

tac january.log february.log

Imprimir entrada estándar en orden inverso

También se puede procesar la entrada por tubería, pero se debe recibir toda la entrada para poder determinar el primer registro.

printf 'one\ntwo\nthree\n' | tac

Ejemplo: invertir las líneas sin cambiar sus caracteres

tac imprime en orden inverso las filas, no los caracteres. El orden de los caracteres dentro de cada fila permanece igual.

printf 'first\nsecond\nthird\n' | tac

Ejemplo de salida:

third
second
first

Es útil al leer registros que se acumulan en orden cronológico comenzando desde la fila más reciente, pero no es lo mismo que ordenar según la marca de tiempo.

Opciones principales

Opciones Descripción
-s STRING Especifique un delimitador de registro para usar en lugar de un salto de línea.
-b Se trata el delimitador como si estuviera adjunto al principio del siguiente registro.
-r Interpretar la cadena delimitadora como una expresión regular.
--help Mostrar la ayuda de la implementación actualmente instalada.

Ejemplos de uso práctico

Revisar desde los registros más recientes

Si se trata de registros de texto simples, puede verlos desde la última entrada. Para registros que se agregan continuamente, tail -f es más adecuado.

tac application.log | less

Invertir registros con un delimitador diferente

En GNU tac, use -s para definir el separador de registros.

tac -s '---' records.txt

Encontrar el último elemento que cumpla con la condición

Después de invertir el orden de salida, puede detenerse en la primera coincidencia para encontrar el elemento más reciente sin mostrar todos los resultados en la pantalla.

tac access.log | grep -m 1 'ERROR'

Comparación con tac y comandos relacionados

Comando Rol principal Situaciones adecuadas
tac Invertir el orden de los registros Leer desde la última línea
cat Mostrar el contenido en el orden original Combinación de salida y archivos
tail Mostrar la parte final Ver solo las últimas líneas
sort -r Orden inverso según el valor Ordenar según el contenido

Precauciones al usar

No es un comando de ordenación

No interpreta el tamaño o los valores de tiempo del contenido, solo invierte el orden actual de los registros.

Los flujos grandes pueden experimentar retrasos

No es adecuado para flujos que no terminan, ya que es necesario conocer el final de la entrada para poder comenzar la salida en orden inverso.

La opción de delimitador verifica la portabilidad

El comportamiento de -s y las expresiones regulares se basa en la implementación de GNU, por lo que consulte el manual del sistema de destino. Para comparar esta herramienta con otras utilidades, consulte la Lista de comandos de uso frecuente en Linux.

FAQ

¿Son tac y sort -r iguales?

No. tac invierte el orden de las líneas actuales, y sort -r ordena las líneas en orden inverso comparando sus valores.

¿Cómo puedo ver solo las últimas 10 líneas al revés?

Se puede combinar como tail -n 10 ARCHIVO | tac.

¿Se pueden ver los registros en tiempo real en orden inverso?

Es difícil procesar la entrada que no termina en orden inverso. Para la supervisión en tiempo real, use tail -f.

¿Se mezclan varios archivos en uno para procesarlos en orden inverso?

Normalmente, cada archivo se lee en el orden de los argumentos y se imprimen los registros de cada archivo en orden inverso.

Documentación oficial