awk 스크립트에서 "날짜"의 출력으로 현재 시간 가져오기

awk 스크립트에서 "날짜"의 출력으로 현재 시간 가져오기

에서 awk내가 명령을 사용하는 스크립트

system(date)

파일의 현재 날짜를 인쇄하지만 이 명령을 실행한 후에는 다음 줄도 암시적으로 추가됩니다. awk다음에 인쇄하는 내용이 같은 줄에 있도록 새 줄을 추가하지 않고 현재 날짜를 인쇄하는 방법이 있습니까 ?

답변1

date명령은 출력 끝에 개행 문자를 추가합니다. 출력을 awk로 읽고 개행을 추가하지 않고 인쇄할 수 있습니다.

"date" | getline date; printf "%s", date

스크립트가 오랫동안 실행되지 않는 한 스크립트가 시작된 날짜를 얻을 수도 있습니다.

awk -v date="$(date)" '
    … printf "%s", date …
'

답변2

GNU awk@토마스디키mawk구현에는 awk시간 및 날짜 기능과 관련된 일부 확장이 있습니다 . 이를 사용하면 다음을 사용할 수 있습니다.

strftime("%+", systime())

date유틸리티에서 생성된 것과 동일한 형식으로 문자열 표현을 가져옵니다 .

또는 약간 다른 형식이지만 이식성이 더 높은 경우(BSD가 아닌 시스템의 경우)

strftime("%c", systime())

시험:

$ date
Mon Jan 28 11:22:22 CET 2019
$ gawk 'BEGIN { print strftime("%+", systime()) }'
Mon Jan 28 11:22:27 CET 2019
$ mawk 'BEGIN { print strftime("%+", systime()) }'
Mon Jan 28 11:22:33 CET 2019

시스템이 해당 형식을 지원하지 않는 경우 %+(에 없음 glibc2) %c이에 매우 가까운 형식을 생성할 수 있습니다. 정확한 형식은 strftime()C 라이브러리의 구현과 현재 날짜/시간 관련 로캘에 따라 달라집니다. C/ 로케일 에서는 POSIX위와 동일한 출력을 얻을 수 있지만 시간대 약어는 없습니다.

BSD awk구현에는 기본적으로 이러한 기능이 없을 수도 있습니다.

또한보십시오:

  • 시스템의 awk및 (시간/날짜 스탬프 형식에 대한) 설명서 .strftime

관련 정보