Questão acrescentando timestamp à cauda -f resultados


Eu gostaria de ter um timestamp impresso na frente de cada linha que sai de um "tail -f outputfile", para que eu saiba quando cada linha é impressa. Algo como:

[...]
20110617_070222: resultados impressos aqui
20110617_070312: resultados impressos aqui
20110617_070412: resultados impressos aqui
20110617_070513: resultados impressos aqui
[...]

Alguma ideia?


4


origem


Note que você não está recebendo o que pediu. As respostas que você recebeu baseiam-se no pressuposto de que você não se importa com os erros de timestamp introduzidos pelo fato de que esses são os horários tail grava em sua saída padrão, não as vezes que as linhas foram escritas no arquivo original em primeiro lugar. Você pode não se importar, mas esteja ciente dessa suposição derivada de sua pergunta como está escrita. - JdeBP


Respostas:


Provavelmente não fica mais curto que isso:

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

Note que usei o formato de data e hora sugerido pela sua pergunta, mas você está livre para usar qualquer coisa suportada pelo date comando (a sintaxe de formato é suportada pelo BSD padrão e pela data GNU).


5



Observe que xargs ignora linhas vazias. Para o meu usecase tudo bem, mas a sua milhagem pode variar. - David Ongaro
Isso vai quebrar se xargs encontra citações inigualáveis " na linha. - MarSoft
Entendo. Talvez tail -f outputfile | tr '\n' '\0' | xargs -0IL date +"%Y%m%d_%H%M%S:L" é melhor neste caso? Também trabalha com linhas vazias então. - David Ongaro


Escreva um script simples para fazer isso. Aqui está um exemplo em perl:

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

Para usar o script, simplesmente envie o resultado final:

tail -f outputfile | ./prepend_timestamp.pl

Você também pode fazer isso inline:

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

6





Com awk:

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

1



Isso imprime o mesmo tempo para todas as linhas no meu caso, mesmo se elas aparecerem por 10 segundos. - Georges Dupéron