GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo di tail per seguire un file senza visualizzare le righe più recenti

Uguale a @muru ma usando l'operatore modulo invece di memorizzare ed eliminare:

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]}'

Forse 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]}'

Il codice awk, espanso:

{
    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]
}

Questo non è molto efficiente, perché rileggerà il file due secondi dopo averlo letto l'ultima volta e perderai delle righe se l'output arriva troppo velocemente, ma altrimenti farà il lavoro:

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

Linux
  1. Il metodo più efficiente per svuotare il contenuto di un file?

  2. Copiare il contenuto di un file negli appunti senza visualizzarne il contenuto?

  3. Stampa il contenuto del file senza la prima e l'ultima riga?

  4. Ottieni il file più recente in una directory su Linux

  5. Come leggere l'ultima riga di un file di testo in una variabile usando Bash?

Utilizzo del file di configurazione SSH

Copia il contenuto del file negli Appunti senza visualizzarli

5 modi per contare il numero di righe in un file

Come eseguire l'output in coda -f con i colori utilizzando solo Awk e mostrare il resto dell'output?

Python FTP ottiene il file più recente per data

Modificare l'ordine delle righe in un file