GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan tail untuk mengikuti file tanpa menampilkan baris terbaru

Sama seperti @muru tetapi menggunakan operator modulo alih-alih menyimpan dan menghapus:

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

Mungkin penyangga dengan 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]}'

Kode awk, diperluas:

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

Ini sangat tidak efisien, karena ini akan membaca ulang file dua detik setelah membacanya terakhir kali, dan Anda akan kehilangan baris jika hasilnya terlalu cepat, tetapi sebaliknya akan melakukan pekerjaan:

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

Linux
  1. Bagaimana Melewati Garis File?

  2. Tujuan Menggunakan Fifo Vs File Sementara Atau Pipa?

  3. Metode Paling Efisien Untuk Mengosongkan Isi File?

  1. Apakah Tail Membaca Seluruh File?

  2. Bagaimana Cara Menghapus N Baris Pertama Dari File Ascii Menggunakan Perintah Shell?

  3. Cetak file, lewati baris X pertama, di Bash

  1. Bagaimana cara mengacak baris dalam file menggunakan alat standar di Red Hat Linux?

  2. Bagaimana cara membaca baris terakhir file teks menjadi variabel menggunakan Bash?

  3. Bagaimana cara menghapus file tanpa menggunakan rm?