내 google-fu가 실패했기 때문에 여기 누군가가 나에게 올바른 방향을 알려줄 수 있기를 바랍니다. 일부 데이터 유효성 검사 작업을 수행하고 있는데 시스템이 unix epoch 형식(epoch 이후 초 단위)으로 잘못된 날짜를 기록하고 있는 것 같습니다. 1357853083
(unix epoch 이후의 초 수)와 같은 데이터가 주어지면 bash에서 유효한 unix 타임스탬프인지 확인하는 쉬운 방법이 있습니까 ? 이상적으로는 사람이 읽을 수 있는 날짜로 변환할 수 없는 타임스탬프와 현재 날짜보다 이후의 날짜로 렌더링될 수 있는 타임스탬프를 찾고 있습니다.
사람이 읽을 수 있는 날짜로 변환하는 이 괴물을 편집했지만 유효하지 않은 날짜를 찾는 방법을 모르겠습니다.
$ grep "delimiter" * | grep -v "delimiter2" | awk -F"," '{print $2}' | awk -F":" '{print $2}' | awk -F"*" '{print $1}' | awk '{printf("%s", strftime("%Y.%m.%d ",$1)); printf("%s", strftime("%H:%M:%S \n",$1))}' | sort -V
답변1
그래서 두 가지 테스트를 하려는 것 같습니다.
- 시스템이 32비트 또는 64비트 시간을 사용하는지에 따라 -2147483648에서 2147483647 또는 +-9.22337203685478E18 사이의 유효한 에포크 시간 번호를 확인하세요.
- 오늘 날짜보다 작은 숫자가 있는지 확인하고 싶습니다.
따라서 이 두 가지 테스트를 결합하면 -2147483648부터 현재 시점까지의 시간 범위에서 숫자를 찾습니다. 아래 코드는 원하는 작업을 수행해야 합니다. 하지만 컴퓨터가 설치된 날짜나 운영 체제가 컴파일된 날짜와 같은 합리적인 시대 날짜로 하한을 높이겠습니다. 하한을 0초 또는 1970년 1월 1일로 임의로 설정했습니다.
#$i stores the value being tested
#returns failed if it fails validation, otherwise it returns passed
if [ $i -le 0 -o $i -gt `date +%s` ]; then echo "failed"; else echo "passed"; fi;