tee로 작성된 각 줄 앞에 현재 날짜와 시간을 붙일 수 있습니까?

tee로 작성된 각 줄 앞에 현재 날짜와 시간을 붙일 수 있습니까?

긴 bash 명령의 결과를 파일에 캡처하기 위해 'tee' 명령을 사용하고 있습니다.

tee로 내보낸 파일에 해당 줄이 작성된 시점의 타임스탬프를 각 줄의 접두어로 붙일 수 있나요? 각 줄에 서로 다른 날짜 시간 값이 있는 솔루션을 찾고 있습니다. 각 줄의 접두사가 동일한 값이 아닙니다.

내가 이것을 원하는 이유는 느린 영역이 어디에 있는지 이해하기 위해 파일을 읽을 때 나중에 각 줄이 언제 방출되는지를 아는 것이 매우 유용할 것이기 때문입니다.

답변1

tee가 뭔가를 할 수 없다면, 그것을 할 수 있는 프로그램으로 파이프하세요.더 많은 유틸리티ts목적이 정확히 다음과 같은 도구가 있습니다 .

$ 에코 테스트 | TS
2월 2일 13:17:27 테스트

타임 스탬프를 원할 경우모든 것, 사용법이 명확해야 합니다.

myapp | ts | tee app.log

다른 조합도 가능합니다. 예를 들어, 화면 출력에만 타임스탬프를 찍거나 로그 파일에만 타임스탬프를 지정하려면 다음을 수행하세요.

myapp | tee app.log | ts
myapp | tee >(ts > app.log)
myapp | tee /dev/tty | ts > app.log
myapp | pee "ts > app.log" "cat"
myapp | pee "cat > app.log" "ts"

(예, 마지막 항목도 moreutils에서 가져온 것입니다.)

답변2

다음의 대안 ts:

echo "foo" | stdbuf -o0 sed 's/%/%%/g' | xargs -d '\n' -I {} date '+%F %T {}' | tee -a "/tmp/foo.log"

산출:

# cat "/tmp/foo.log"
2022-02-24 09:43:00 foo

stdout 및 stderr을 파일에 기록하는 예( /dev/null터미널에도 쓰려면 제거):

exec &> >(stdbuf -o0 sed 's/%/%%/g' | xargs -d '\n' -I {} date '+%F %T {}' | tee -a "/tmp/std.log" >/dev/null )

다음을 사용하는 또 다른 대안 awk:

echo "foo" | xargs -d'\n' -I{} echo '{}' | awk '{ print strftime("%F %T"), $0; fflush(); }' | tee -a "/tmp/foo.log"

관련 정보