首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据日数计算老化桶

根据日数计算老化桶
EN

Stack Overflow用户
提问于 2014-12-05 12:00:56
回答 1查看 180关注 0票数 0

想要生成的报告,计算的天数,材料在仓库里。天数是指材料进入的日期与生成报告的日期( ($3 field) )之间的差额,(05-NOV-2014)用于查看库存。现在,我该怎么做呢?而且,一旦我得到了天数,这些必须被归类为

代码语言:javascript
复制
CAT-1 for the days 0-30Days,CAT-2 for days 31-60Days,CAT-3 for days 61-90Days,CAT-4 for days 91-180Days,
CAT-5 for days 181-365Days,CAT-6 for days 365-730Days,CAT-7 for days Greaterthan>730Days 

对抗Product($4) and Material($5)的明智组合。

Input.csv

代码语言:javascript
复制
Des11,Des22,DateIn,Product,Material,Loc11,Loc22

10,a,15-SEP-14.11:09:06,ab,pq,yyy,zzz
20,a,23-SEP-14.08:09:35,ab,pq,yyy,zzz
10,a,15-MAY-14.08:09:26,ab,pq,yyy,zzz
62,a,17-FEB-12.03:09:23,ab,pq,yyy,zzz
10,a,04-NOV-14.11:09:06,cd,rs,yyy,zzz
20,a,12-AUG-14.08:09:35,cd,rs,yyy,zzz
10,a,16-DEC-13.08:09:26,cd,rs,yyy,zzz
62,a,18-DEC-13.03:09:23,cd,rs,yyy,zzz

例如,我正在手动计算老化桶:生成报告的日期是手动输入,所以我可以使用任何格式,如05-11月14日、05-11月-2014年或20141105,但是我没有任何权利更改输入提要,即15-SEP-14.11:09:06。

代码语言:javascript
复制
DateofReportGen,DateIn($3),DateIn,NoOfDays,Ageing Bucket
05-Nov-14,15-SEP-14.11:09:06,15-Sep-14,51,31-60Days
05-Nov-14,23-SEP-14.08:09:35,23-Sep-14,43,31-60Days
05-Nov-14,15-MAY-14.08:09:26,15-May-14,174,91-180Days
05-Nov-14,17-FEB-12.03:09:23,17-Feb-12,992,Greaterthan>730Days
05-Nov-14,04-NOV-14.11:09:06,04-Nov-14,1,0-30Days
05-Nov-14,12-AUG-14.08:09:35,12-Aug-14,85,61-90Days
05-Nov-14,16-DEC-13.08:09:26,16-Dec-13,324,181-365Days
05-Nov-14,18-DEC-13.03:09:23,18-Dec-13,322,181-365Days 

我正在努力寻找“没有日子”,但被击中了。

代码语言:javascript
复制
awk -F, -v q='"' '{
 c="date -d"q$3q" +%s";c|getline d1;close(c); 
 c="date -d"q05-NOV-14q" +%s";c|getline d2;close(c);
 printf "%s,%d\n", $0,(d2-d1)/3600/24}' Input.csv

期望产出:

基于老化桶的产品和材料的计数:

代码语言:javascript
复制
Product,Material,0-30Days,31-60Days,61-90Days,91-180Days,181-365Days,365-730Days,Greaterthan>730Days
ab,pq,0,2,0,1,0,0,1
cd,rs,1,0,1,0,2,0,0

我正在寻找您的建议,不要有Perl/Python访问!

Edit#1:感谢gboffi的输入,在执行下面的脚本时,我得到了所有行项的"elapsed_days“作为16410.3 .请建议

代码语言:javascript
复制
awk -F, 'NR==1 {print}
         NR>1  {date=$3;
                gsub("[-.]"," ",date);
                printf $0 ",";system("date --date=\"" date "\" +%s")}
'  $filename | awk -F, -v OFS=, -v now=`date +%s` '
         NR==1 {print $0 ",elapsed_days"}
         NR>1  {$8=now-$8; $8=$8/24/3600;print $0}' Input.csv

输出- Edit#1:

代码语言:javascript
复制
Des11,Des22,DateIn,Product,Material,Loc11,Loc22,elapsed_days
10,a,15-SEP-14.11:09:06,ab,pq,yyy,zzz,16410.3
20,a,23-SEP-14.08:09:35,ab,pq,yyy,zzz,16410.3
10,a,15-MAY-14.08:09:26,ab,pq,yyy,zzz,16410.3
62,a,17-FEB-12.03:09:23,ab,pq,yyy,zzz,16410.3
10,a,04-NOV-14.11:09:06,cd,rs,yyy,zzz,16410.3
20,a,12-AUG-14.08:09:35,cd,rs,yyy,zzz,16410.3
10,a,16-DEC-13.08:09:26,cd,rs,yyy,zzz,16410.3
62,a,18-DEC-13.03:09:23,cd,rs,yyy,zzz,16410.3
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-05 12:44:04

我有一个两关的解决方案

代码语言:javascript
复制
awk -F, 'NR==1 {print}
         NR>1  {date=$3;
                gsub("[-.]"," ",date);
                printf $0 ",";system("date --date=\"" date "\" +%s")}
'  $filename | awk -F, -v OFS=, -v now=`date +%s` '
         NR==1 {print $0 ",elapsed_days"}
         NR>1  {$8=now-$8; $8=$8/24/3600;print $0}'

当然,当您有在$8中的天数时,您可以根据您的意愿格式化您的最终输出。

对OP问题的响应

下面的内容是从我的终端复制和粘贴的,

  1. 我给你看我的数据版本,从你的原始文章中复制和粘贴, % Des11,Des22,DateIn,产品,材料,Loc11,Loc22 10,a,15-SEP-14.11:09:06,ab,pq,yyy,zzz 20,a,23-SEP-14.08:09:35,ab,pq,yyy,zzz 10,a,15-14.08:09:26,ab,pq,yyy,zzz 62,a,17-FEB-12.03:09:23,ab,pq,yyy,zzz 10,a,04-11月-14.11:09:06,cd,rs,yyy,zzz 20,a,12-8月-14.08:09:35,cd,rs,yyy,zzz 10,a,16-DEC-13.08:09:26,cd,rs,yyy,zzz 62,a,18-DEC-13.03:09:23,cd,rs,yyy,zzz
  2. 我只执行两个阶段管道的第一部分。 % awk -F,'NR==1 {print} NR>1 {date=$3;gsub("-.",“日期”);printf $0,";系统(“日期-日期=”日期“+%s")}‘枣Des11,Des22,DateIn,产品,材料,Loc11,Loc22 10,a,15-SEP-14.11:09:06,ab,pq,yyy,zzz,1410772146 20,a,23-SEP-14.08:09:35,ab,pq,yyy,zzz,1411452575 10,a,15-5月-14.08:09:26,ab,pq,yyy,zzz,1400134166 62,a,17-2月-12.03:09:23,ab,pq,pq,yyy,zzz,1329444563 10,a,04-11月-14.11:09:06,cd,rs,yyy,zzz,1415095746 20,a,12-8月-14.08:35,cd,rs,yyy,zzz,1407823775 10,a,16-DEC-13.08:09:26,cd,rs,yyy,zzz,1387177766 62,a,18-DEC-13.03:09:23,cd,rs,yyy,zzz,1387332563 请注意最后一个字段上的输出,其中包含系统的date命令的输出
  3. 我最终执行了整个管道,每一行的运行天数是不同的。 你的手术怎么了?查看日期命令的输出,例如,date --date="15 SEP 14 11:09:06" +%s,如果这不是问题所在,还有什么? % awk -F,'NR==1 {print} NR>1 {date=$3;gsub("-.",“日期",日期);printf $0,”;系统(“日期-日期=”日期"\“”日期“\”+%s")}‘日期’\“+%s”}‘日期- awk -F,-v OFS=,-v now=date +%s’NR==1 {print $0,elapsed_days"} NR>1 {8美元=现在$8;8美元=8/24/3600美元;打印$0}‘Des11,Des22,DateIn,Product,MAY,Loc11,Loc22,elapsed_days 10,a,15-SEP-14.11:09:06,ab,pq,yyy,zzz,81.9347 20,a,23-SEP-14.08:09:35,ab,pq,yyy,zzz,74.0593 10,a,a-14.08:09:26,ab,pq,yyy,zzz,205.059 62,a,17-FEB-12.03:09:23,ab,yyy,zzz,1023.23,10,A,04-14.11:09:06,cd,rs,yyy,zzz,31.893 20,a,12-8月12:09:35,cd,rs,yyy,zzz,116.059 10,a,16-DEC-13.08:09:26,cd,rs,yyy,zzz,355.018 62,a,18-DEC-13.03:09:23,cd,rs,yyy,zzz,353.226 %
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27315470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档