AIX

时间:2017-01-17 15:43:16

标签: perl shell date sh ksh

我必须创建一个接受字符串,开始日期和结束日期的shell脚本文件,并以下面的格式生成输出文件。

注意:日期为MM / DD / YYYY

string,start date
string,start date + 1
...
string,end date

我无法增加日期。我尝试使用date -d选项,但它在AIX上不可用。

有人可以帮助使用内置的shell脚本命令或perl命令来增加日期吗?

2 个答案:

答案 0 :(得分:2)

考虑到'使用核心'的约束:

#!/usr/bin/env perl

use strict;
use warnings;
use Time::Piece;
use Time::Seconds;

my $FORMAT = '%m/%d/%Y';

my $start = '01/22/2016';
my $end   = '01/31/2016';

my $start_t = Time::Piece->strptime( $start, $FORMAT );
my $end_t   = Time::Piece->strptime( $end,   $FORMAT );

while ( $start_t <= $end_t ) {
   print $start_t ->strftime($FORMAT), "\n";
   $start_t += ONE_DAY;
}

Time::PieceTime::Seconds都是perl 5.9.5的核心。后者仅在ONE_DAY时需要 - 否则您只需添加60 * 60 * 24即可。

我相信你可以弄清楚如何自己打印字符串等。

(我也注意到 - 这是一种可怕的时间格式,should be avoided

答案 1 :(得分:0)

你可以使用像这样的awk制作一个shellcript:

str="some string"
startd="12/25/2016"
endd="1/17/2017"

maxloop=10

echo "${maxloop}" |
awk -v string="${str}" -v startdate="${startd}" -v enddate="${endd}" '{
    split(startdate,A,"[/]");
    T1=mktime(A[3] " " A[1] " " A[2] " 0 0 0");
    split(enddate,B,"[/]");
    T2=mktime(B[3] " " B[1] " " B[2] " 23 59 59");
    linenr=1;
    while (T1 < T2) {
       printf("%s,%s\n",string,
          strftime("%m-%d-%Y",T1));
       T1+=3600*24;
       if (linenr++ > $1) break;
    }
}'

linenr / maxloop没有向解决方案添加内容,但会有所帮助 输入值中的错误或脚本的维护。