我必须创建一个接受字符串,开始日期和结束日期的shell脚本文件,并以下面的格式生成输出文件。
注意:日期为MM / DD / YYYY
string,start date
string,start date + 1
...
string,end date
我无法增加日期。我尝试使用date -d
选项,但它在AIX上不可用。
有人可以帮助使用内置的shell脚本命令或perl命令来增加日期吗?
答案 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::Piece
和Time::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没有向解决方案添加内容,但会有所帮助 输入值中的错误或脚本的维护。