GNU/Linux >> Linux の 問題 >  >> Linux

tail を使用して、最新の行を表示せずにファイルを追跡する

@muru と同じですが、保存と削除の代わりにモジュロ演算子を使用します:

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

おそらく 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]}'

展開された awk コード:

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

これはあまり効率的ではありません。ファイルを最後に読み取ってから 2 秒後に再度読み取るためです。出力が速すぎると行が失われますが、それ以外の場合は問題なく機能します:

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

Linux
  1. テールはファイル全体を読み取りますか?

  2. シェルコマンドを使用してASCIIファイルの最初のN行を削除するにはどうすればよいですか?

  3. Bashで、最初のX行をスキップしてファイルを印刷します

  1. Red Hat Linux の標準ツールを使用して、ファイル内の行をランダム化するにはどうすればよいですか?

  2. Linux のディレクトリにある最新のファイルを取得する

  3. Python FTPは日付で最新のファイルを取得します

  1. Fifoと一時ファイルまたはパイプを使用する目的は?

  2. ファイルの内容を空にする最も効率的な方法は?

  3. ファイルの内容を表示せずにクリップボードにコピーしますか?