2017-01-10 20 views
4

Я пытаюсь выяснить дни недели b/w две даты. Ниже приведен код, который отлично работает в UNIX.Рассчитать дни между двумя датами в AIX с использованием Bash

date1=$(date "+%m/%d/%y") 
temp1=4/8/24 
echo $((($(date -u -d $temp1 +%s) - $(date -u -d $date1 +%s))/86400)) 

Когда я выполнении выше сценария на AIX поле, я получаю ниже ошибки:

date: Not a recognized flag: d

Usage: date [-u] [+"Field Descriptors"]

date: Not a recognized flag: d

Usage: date [-u] [+"Field Descriptors"]

(-)/86400: syntax error: operand expected (error token is ")/86400")`

Это PROD окр и я не имею права администратора для установки любой пакет на нем.

+0

У вас есть доступ к Perl или AWK? Взгляните: http://unix.ittoolbox.com/groups/technical-functional/unixadmin-l/shell-script-to-find-noofdays-between-two-dates-in-aix-server-5591705 – Cyrus

+0

Существует awk NOT Gawk на aix box. – user0

+0

Кажется, что в AIX нет флага 'd'. См. Информацию о командах даты AIX: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.cmds2/date.htm –

ответ

1

Это предполагает, что в месяц составляет 1/12 от года, и что вы используете правильные 4 цифры лет:

#!/usr/bin/awk -f 
function mktm(datespec) { 
    split(datespec, q, "/") 
    return \ 
    (q[3] - 1970) * 60 * 60 * 24 * 365.25 + \ 
    (q[1] - 1) * 60 * 60 * 24 * 365.25/12 + \ 
    (q[2] - 1) * 60 * 60 * 24 
} 
function ceil(x) { 
    y = int(x); return y < x ? y + 1 : y 
} 
BEGIN { 
    srand() 
    print ceil((mktm(ARGV[1]) - srand())/(60 * 60 * 24)) 
}