[bash] Bash에서 타임 스탬프를 날짜로 변환하는 방법은 무엇입니까?
유닉스 타임 스탬프를 날짜로 변환하는 쉘 명령이나 스크립트가 필요합니다. 입력은 첫 번째 매개 변수 또는 stdin에서 가져올 수 있으며 다음 사용 패턴을 허용합니다.
ts2date 1267619929
과
echo 1267619929 | ts2date
두 명령 모두 “Wed Mar 3 13:38:49 2010″을 출력해야합니다.
답변
일반적인 Linux 배포판의 이후 버전에서는 다음을 사용할 수 있습니다.
date -d @1267619929
답변
date -r <number>
Mac OS X에서 작동합니다.
답변
이 버전은 chiborg의 답변 과 비슷 하지만 외부 tty
및 의 필요성을 제거합니다 cat
. 사용 date
하지만 쉽게 사용할 수 있습니다 gawk
. shebang을 변경하고 이중 대괄호를 단일 대괄호로 바꿀 수 있습니다 sh
.
#!/bin/bash
LANG=C
if [[ -z "$1" ]]
then
if [[ -p /dev/stdin ]] # input from a pipe
then
read -r p
else
echo "No timestamp given." >&2
exit
fi
else
p=$1
fi
date -d "@$p" +%c
답변
예를 들어 GNU 날짜를 사용할 수 있습니다.
$ sec=1267619929
$ date -d "UTC 1970-01-01 $sec secs"
또는
$ date -ud @1267619929
답변
이 간단한 awk 스크립트를 사용할 수 있습니다.
#!/bin/gawk -f
{ print strftime("%c", $0); }
샘플 사용법 :
$ echo '1098181096' | ./a.awk
Tue 19 Oct 2004 03:18:16 AM PDT
$
답변
Bash 4.2부터 printf
의 %(datefmt)T
형식을 사용할 수 있습니다 .
$ printf '%(%c)T\n' 1267619929
Wed 03 Mar 2010 01:38:49 PM CET
쉘 내장이기 때문에 좋습니다. datefmt 의 형식은 strftime(3)
(에서 참조 할 수 있는 문자열 man 3 strftime
입니다. 여기 %c
있습니다 :
%c
현재 로캘의 기본 날짜 및 시간 표현입니다.
이제 인수를 허용하고 아무것도 제공되지 않으면 stdin을 읽는 스크립트를 원하면 다음과 같이 진행할 수 있습니다.
#!/bin/bash
if (($#)); then
printf '%(%c)T\n' "$@"
else
while read -r line; do
printf '%(%c)T\n' "$line"
done
fi
답변
로그 파일을 변환하거나 모니터링 할 때 이것을 사용합니다.
tail -f <log file> | gawk \
'{ printf strftime("%c", $1); for (i=2; i<NF; i++) printf $i " "; print $NF }'