GNU/Linux >> Tutoriales Linux >  >> Linux

Uso de la cola para seguir un archivo sin mostrar las líneas más recientes

Igual que el de @muru pero usando el operador de módulo en lugar de almacenar y eliminar:

tail -fn+1 some/file | awk -v n=30 '
   NR > n {print s[NR % n]}
   {s[NR % n] = $0}
   END{for (i = NR - n + 1; i <= NR; i++) print s[i % n]}'

Tal vez buffer con awk:

tail -n +0 -f some/file | awk '{b[NR] = $0} NR > 30 {print b[NR-30]; delete b[NR-30]} END {for (i = NR - 29; i <= NR; i++) print b[i]}'

El código awk, ampliado:

{
    b[NR] = $0 # save the current line in a buffer array
}
NR > 30 { # once we have more than 30 lines
    print b[NR-30]; # print the line from 30 lines ago
    delete b[NR-30]; # and delete it
}
END { # once the pipe closes, print the rest
    for (i = NR - 29; i <= NR; i++)
        print b[i]
}

Esto no es muy eficiente, porque volverá a leer el archivo dos segundos después de haberlo leído por última vez, y perderá líneas si la salida llega demasiado rápido, pero de lo contrario hará el trabajo:

watch 'tail -n40 /path/to/file | head -n10'

Linux
  1. ¿Cómo recorrer las líneas de un archivo?

  2. ¿El Propósito De Usar Un Fifo Vs Un Archivo Temporal O Una Tubería?

  3. ¿El método más eficiente para vaciar el contenido de un archivo?

  4. ¿Tail lee todo el archivo?

  5. Obtenga el archivo más reciente en un directorio en Linux

Uso del archivo de configuración SSH

Copie el contenido del archivo en el portapapeles sin mostrarlo

5 formas de contar el número de líneas en un archivo

¿Cómo seguir la salida -f con colores usando solo Awk y mostrar el resto de la salida?

¿Cómo leer la última línea de un archivo de texto en una variable usando Bash?

¿Cómo eliminar un archivo sin usar rm?