Linux

使用“tail”跟隨文件而不顯示最近的行

  • September 23, 2020

我想使用像 tail 這樣的程序來跟踪正在寫入的文件,但不顯示最近的行。

例如,當關註一個新文件時,當文件少於 30 行時不會顯示任何文本。超過 30 行寫入文件後,將從第 1 行開始將行寫入螢幕。

因此,當第 31-40 行寫入文件時,第 1-10 行將寫入螢幕。

如果沒有簡單的方法可以用tail來做到這一點,也許有一種方法可以在每次第一個文件擴展一行時從第一個文件的前一行寫入一個新文件,並且該新文件的尾部……

也許用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]
}

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

引用自:https://unix.stackexchange.com/questions/510178