![awk 스크립트에서 "날짜"의 출력으로 현재 시간 가져오기](https://linux55.com/image/1681/awk%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%22%EB%82%A0%EC%A7%9C%22%EC%9D%98%20%EC%B6%9C%EB%A0%A5%EC%9C%BC%EB%A1%9C%20%ED%98%84%EC%9E%AC%20%EC%8B%9C%EA%B0%84%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0.png)
에서 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