我必須創建一個shell腳本文件,它接受一個字符串,開始日期和結束日期,並以下面的格式生成輸出文件。在AIX上的shell腳本中的遞增日期
注:日期是MM/DD/YYYY
string,start date
string,start date + 1
...
string,end date
我不能夠增加日期。我嘗試使用date -d
選項,但它在AIX上不可用。
有人可以請幫助一個內置的shell腳本命令或perl命令來增加日期嗎?
我必須創建一個shell腳本文件,它接受一個字符串,開始日期和結束日期,並以下面的格式生成輸出文件。在AIX上的shell腳本中的遞增日期
注:日期是MM/DD/YYYY
string,start date
string,start date + 1
...
string,end date
我不能夠增加日期。我嘗試使用date -d
選項,但它在AIX上不可用。
有人可以請幫助一個內置的shell腳本命令或perl命令來增加日期嗎?
鑑於 '使用核心' 的約束:
#!/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)
喜歡ISO 8601鏈接 - 多麼真實! –
您可以用awk這樣做一個shell腳本:
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不加入什麼到解決方案,但將有助於防止輸入值或維護腳本中的錯誤。
您可以安裝第三方perl模塊,還是需要堅持使用內置功能?如果後者,你有哪個版本的Perl? (另外,你是否有Python解釋器?如果是這樣,又是什麼版本?) –
...拋開:「MM/DD/YYYY」可能是最差的廣泛使用的日期格式(除MON/DD/YY'):ASCII排序對待它很糟糕,它通常是不明確的(通常不能分辨是否使用'DD/MM/YYYY',這也很受歡迎)。當你有控制權時,'YYYY-MM-DD'是正確的事情:它對人類讀者來說不那麼模糊,它符合RFC標準,而且分類很好。 –
「'MM/DD/YYYY'也許是最糟糕的廣泛使用的日期格式」更何況,它甚至沒有任何意義。 – ThisSuitIsBlackNot