2014-12-05 64 views
0

想生成報告,該報告計算物料在倉庫中的天數。 天數爲物料進入日期($3 field)與報告生成日期 之間的差異以查看清單。 現在,我該如何解決這個問題。而且,一旦我得到的天數, 這些必須被歸類爲基於天數計算老化桶

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

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 

例如,我calulating老化桶像下面手動: 報告生成的日期是手動進給,所以我可以能夠使用任何格式像05-NOV-14或05-NOV-2014或然而20141105 ,我沒有任何權利來改變輸入饋即15-SEP-14.11:09:06

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 

我試圖找到 「無天的」但遭到襲擊

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 

所需的輸出:

產品和材料的伯爵明智的基礎上帳齡時段:

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的訪問!

編輯#1:感謝gboffi您的輸入,而下面的腳本執行此,我得到 「elapsed_days」 爲16410.3所有項目...請建議

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 

輸出 - 編輯#1:

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 

回答

1

我有兩個通道解決方案

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. 我告訴你我的版本的數據,複製並從您的原始帖子粘貼的,

    % cat dates 
    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 
    
  2. 我只執行t的第一部分他2個階段管道

    % awk -F, 'NR==1 {print} 
          NR>1 {date=$3; 
            gsub("[-.]"," ",date); 
            printf $0 ",";system("date --date=\"" date "\" +%s")} 
    ' dates 
    Des11,Des22,DateIn,Product,Material,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-MAY-14.08:09:26,ab,pq,yyy,zzz,1400134166 
    62,a,17-FEB-12.03:09:23,ab,pq,yyy,zzz,1329444563 
    10,a,04-NOV-14.11:09:06,cd,rs,yyy,zzz,1415095746 
    20,a,12-AUG-14.08:09: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 --date="15 SEP 14 11:09:06" +%s,如果這不是問題,還有什麼?

    % awk -F, 'NR==1 {print} 
          NR>1 {date=$3; 
            gsub("[-.]"," ",date); 
            printf $0 ",";system("date --date=\"" date "\" +%s")} 
    ' dates | 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}' 
    Des11,Des22,DateIn,Product,Material,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,15-MAY-14.08:09:26,ab,pq,yyy,zzz,205.059 
    62,a,17-FEB-12.03:09:23,ab,pq,yyy,zzz,1023.23 
    10,a,04-NOV-14.11:09:06,cd,rs,yyy,zzz,31.893 
    20,a,12-AUG-14.08: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 
    % 
    
+0

感謝gboffi你的輸入,在執行上面的腳本爲所有行項目,我越來越 「elapsed_days」 爲-16410.3 – VNA 2014-12-06 07:00:10

+0

Des11,Des22,DateIn,產品,材料,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 – VNA 2014-12-06 07:00:53

+0

非常感謝gboffi,它工作的很好,我已經接受了答案,並upvoted! – VNA 2014-12-06 09:11:08