[unix] 타임 스탬프를 stdin 앞에 추가하는 Unix 유틸리티가 있습니까?

파이썬에서 이것에 대한 간단한 작은 스크립트를 작성하게되었지만, 텍스트에 각 줄 앞에 텍스트를 넣을 수있는 유틸리티가 있는지 궁금합니다. 내 경우에는 타임 스탬프입니다. 이상적으로는 다음과 같이 사용됩니다.

cat somefile.txt | prepend-timestamp

(sed에 대답하기 전에 다음을 시도했습니다.

cat somefile.txt | sed "s/^/`date`/"

그러나 sed가 실행될 때 date 명령을 한 번만 평가하므로 각 타임 라인에 동일한 타임 스탬프가 잘못 추가됩니다.)



답변

사용할 수 있습니다 awk:

<command> | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; fflush(); }'

<command>라인 버퍼 출력 을 생성 해야합니다 . 즉, 각 라인 후에 출력 스트림을 플러시합니다. 타임 스탬프 awk추가는 라인의 끝이 입력 파이프에 나타난 시간입니다.

awk에 오류가 표시되면 gawk대신 시도하십시오 .


답변

ts에서 moreutils은 입력의 모든 라인에 타임 스탬프를 앞에 추가합니다 당신은 그것을 제공합니다. strftime을 사용하여 형식을 지정할 수도 있습니다.

$ echo 'foo bar baz' | ts
Mar 21 18:07:28 foo bar baz
$ echo 'blah blah blah' | ts '%F %T'
2012-03-21 18:07:30 blah blah blah
$ 

설치하려면 :

sudo apt-get install moreutils


답변

annotate , 해당 링크를 통해 또는 annotate-output데비안 devscripts패키지 에서 사용 가능

$ echo -e "a\nb\nc" > lines
$ annotate-output cat lines
17:00:47 I: Started cat lines
17:00:47 O: a
17:00:47 O: b
17:00:47 O: c
17:00:47 I: Finished with exitcode 0


답변

주어진 답변을 가장 간단한 답변으로 증류 :

unbuffer $COMMAND | ts

Ubuntu에서는 expect-dev 및 moreutils 패키지에서 제공됩니다.

sudo apt-get install expect-dev moreutils


답변

이건 어때요?

cat somefile.txt | perl -pne 'print scalar(localtime()), " ";'

라이브 타임 스탬프를 얻으려는 욕구로 판단하면 로그 파일이나 다른 것을 실시간으로 업데이트하고 싶습니까? 아마도

tail -f /path/to/log | perl -pne 'print scalar(localtime()), " ";' > /path/to/log-with-timestamps


답변

데몬 도구 에는 tai64ntai64nlocal 이라는 유틸리티 쌍이 있으며 타임 스탬프를 추가하여 메시지를 기록 할 수 있습니다.

예:

cat file | tai64n | tai64nlocal


답변

Kieron의 답변은 지금까지 가장 좋은 답변입니다. 첫 번째 프로그램이 버퍼링하기 때문에 문제가 발생하면 unbuffer 프로그램을 사용할 수 있습니다.

unbuffer <command> | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; }'

대부분의 리눅스 시스템에 기본적으로 설치됩니다. 직접 빌드해야하는 경우 예상 패키지의 일부입니다.

http://expect.nist.gov