題 將時間戳附加到tail -f結果


我想在“tail -f outputfile”出來的每一行前面打印一個時間戳,這樣我就知道每行打印的時間是什麼。有點像:

[...]
20110617_070222:此處打印的結果
20110617_070312:此處打印的結果
20110617_070412:此處打印的結果
20110617_070513:此處打印的結果
[...]

有任何想法嗎?


4
2018-06-17 06:04


起源


請注意,你沒有得到你所要求的。您收到的答案是基於這樣的假設:您不介意由於這些是時間而引入的時間戳錯誤 tail 寫入其標準輸出, 不 首先將行寫入原始文件的時間。你可能不介意,但要注意從你的問題中得出的這個假設。 - JdeBP


答案:


它可能沒有比這更短:

tail -f outputfile | xargs -IL date +"%Y%m%d_%H%M%S:L"

請注意,我使用了您的問題建議的時間戳格式,但您可以自由使用 date 命令(標準BSD和GNU日期支持格式語法)。


5
2018-02-24 07:09



注意 xargs 忽略空行。對於我的用例,這很好,但你的milage可能會有所不同。 - David Ongaro
如果xargs遇到無與倫比的引用,這將會中斷 " 在線。 - MarSoft
我知道了。也許 tail -f outputfile | tr '\n' '\0' | xargs -0IL date +"%Y%m%d_%H%M%S:L" 在這種情況下更好嗎?也適用於空行。 - David Ongaro


寫一個簡單的腳本來做到這一點。這是perl中的一個例子:

#!/usr/bin/perl
while(<>) {
    print localtime . ": $_";
}

要使用該腳本,只需通過它輸出尾輸出:

tail -f outputfile | ./prepend_timestamp.pl

你也可以內聯:

tail -f outputfile | perl -pe '$_ = localtime.": $_"'

6
2018-06-17 06:11





AWK

tail -f infile | awk '{"date \"+%Y%m%d_%H%M%S\"" | getline now} {close("date")} {print now ": " $0}'

1
2018-06-17 06:28



在我的情況下,這打印所有行的相同時間,即使它們出現10秒appart。 - Georges Dupéron