GNU/Linux >> Znalost Linux >  >> Linux

Použití ocasu ke sledování souboru bez zobrazení nejnovějších řádků

Stejné jako u @muru, ale místo ukládání a mazání používá operátor modulo:

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

Možná buffer s 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]}'

Kód awk, rozšířený:

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

To není příliš efektivní, protože soubor znovu načte dvě sekundy po jeho posledním přečtení a pokud výstup přichází příliš rychle, budou vám chybět řádky, ale jinak to udělá:

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

Linux
  1. Účel použití Fifo vs dočasný soubor nebo potrubí?

  2. Nejúčinnější způsob, jak vyprázdnit obsah souboru?

  3. Čte Tail celý soubor?

  1. Vytisknout obsah souboru bez prvního a posledního řádku?

  2. Získejte nejnovější soubor v adresáři v systému Linux

  3. Jak mohu použít řádky souboru jako argumenty příkazu?

  1. Python FTP získá nejnovější soubor podle data

  2. Jak načíst poslední řádek textového souboru do proměnné pomocí Bash?

  3. Jak odstranit soubor bez použití rm?