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.