scripts script resueltos programas programacion pasar parametros manejo ejercicios ejemplos ejecutar comandos cadenas linux bash shell tail

linux - resueltos - scripts bash ejemplos



LĂ­neas de archivo de salida de Ășltima a primera en Bash (5)

Quiero mostrar las últimas 10 líneas de mi archivo de registro, comenzando con la última línea , como un lector de registro normal. Pensé que esto sería una variación del comando tail, pero no puedo encontrar esto en ninguna parte.


Este es el método perfecto para imprimir la salida en orden inverso.

tail -n 10 <logfile> | tac


Puedes hacer eso con puro bash:

#!/bin/bash readarray file lines=$(( ${#file[@]} - 1 )) for (( line=$lines, i=${1:-$lines}; (( line >= 0 && i > 0 )); line--, i-- )); do echo -ne "${file[$line]}" done

./tailtac 10 <algun archivo

./tailtac -10 <algun archivo

./tailtac 100000 <algun archivo

./tailtac <algun archivo


Terminé usando tail -r , que funcionó en mi OSX ( tac no)

tail -r -n10


tac hace lo que tu quieras Es el reverso del cat .

tail -10 logfile | tac


GNU (Linux) utiliza lo siguiente :

tail -n 10 <logfile> | tac

tail -n 10 <logfile> imprime las últimas 10 líneas del archivo de registro y tac (cat deletreado al revés) invierte el orden.

BSD (OS X) de tail usa la opción -r :

tail -r -n 10 <logfile>

Para ambos casos , puedes probar lo siguiente:

if hash tac 2>/dev/null; then tail -n 10 <logfile> | tac; else tail -n 10 -r <logfile>; fi

NOTA: El manual de GNU indica que la opción BSD -r "solo puede revertir los archivos que son a lo sumo tan grandes como su búfer, que normalmente es de 32 KiB" y que tac es más confiable. Si el tamaño del búfer es un problema y no puede usar tac , puede considerar usar la respuesta de @ ata que escribe la funcionalidad en bash.