【发布时间】:2017-03-04 18:43:33
【问题描述】:
我需要从 awk 中的文件中读取日期格式。
我文件中的每一行都有两个日期数据,一个在第一个元素中,另一个在第二个元素中。格式为day/month/year。
有没有一种方法可以比较 awk 中的两个日期。
例如,如果我有 03/05/2015 和 05/05/2015,我需要 2 天作为答案。
很抱歉没有为我的问题提供示例输入/输出。输入实际上与 Akshay 描述的相同。 我有一个文件,其中每行以两个日期开头
03/05/2015 05/05/2015
对应于进程的开始和结束(第二个总是发生在第一个之后)。
我使用 awk 进行硬编码以读取有关两个日期的信息。
这不是最佳解决方案,但我需要在昨天之前获得一些结果。
简单地说,我提取每个日期的日、月和年,并计算它们相距多少天。
我还做了一个简单的检查,看看对应的年份是否是闰年。
awk'{
D1= int(substr($1,1,2));
D2= int(substr($2,1,2));
M1= int(substr($1,4,2));
M2= int(substr($2,4,2));
Y1 = int(substr($1,7,4));
Y2 = int(substr($2,7,4));
leap1 = ((Y1-2008)%4)?1:0;
leap2 = ((Y2-2008)%4)?1:0;
cnt1 = 0;
ii = 1;
while(ii<D1) {
if(ii==2) cnt1+=(leap1+28); else{if((ii==1)||(ii==3)||(ii==5)||(ii==7)||(ii==8)||(ii==10)||(ii==12)) cnt1+=31; if((ii==4)||(ii==6)||(ii==9)||(ii==11)) cnt1+=30;}ii++;}
cnt2 = 0;
ii = 1;
while(ii<D2)
{
if(ii==2) cnt2+=(leap2+28); else{if((ii==1)||(ii==3)||(ii==5)||(ii==7)||(ii==8)||(ii==10)||(ii==12)) cnt2+=31; if((ii==4)||(ii==6)||(ii==9)||(ii==11)) cnt2+=30;}ii++;}
Day = cnt2-cnt1+D2-D1+(Y2-Y1)*365;
}`
我知道这远非最佳,但我再次需要快速制作一些东西。
【问题讨论】:
-
很高兴展示您到目前为止所尝试的内容,以及更清晰的输入/所需的输出。阅读How to Ask。
标签: awk