파이썬에서 이것에 대한 간단한 작은 스크립트를 작성하게되었지만, 텍스트에 각 줄 앞에 텍스트를 넣을 수있는 유틸리티가 있는지 궁금합니다. 내 경우에는 타임 스탬프입니다. 이상적으로는 다음과 같이 사용됩니다.
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
답변
데몬 도구 에는 tai64n 및 tai64nlocal 이라는 유틸리티 쌍이 있으며 타임 스탬프를 추가하여 메시지를 기록 할 수 있습니다.
예:
cat file | tai64n | tai64nlocal
답변
Kieron의 답변은 지금까지 가장 좋은 답변입니다. 첫 번째 프로그램이 버퍼링하기 때문에 문제가 발생하면 unbuffer 프로그램을 사용할 수 있습니다.
unbuffer <command> | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; }'
대부분의 리눅스 시스템에 기본적으로 설치됩니다. 직접 빌드해야하는 경우 예상 패키지의 일부입니다.
