从awk的文件计算$ 2,$ 3之间的时间差 [英] Calculate date difference between $2,$3 from file in awk

查看:645
本文介绍了从awk的文件计算$ 2,$ 3之间的时间差的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要你的帮助。

文件只有日期,

file.txt的

  P1,2013 /七月/ 9,2013 /七月/ 14
P2,2013 /月/ 14,2013 /月/ 6
P3,2013 /七月/ 7,2013 /七月/ 5

显示输出这样

  P1,2013 /七月/ 9,2013 /七月/ 14,5days
P2,2013 /月/ 14,2013 /月/ 6,8days
P3,2013 /月/ 7,2013 /月/ 5,2days


解决方案

 的awk'
    开始 {
        个月=一月二月三月四月五月六月七月八月九月十月十一月十二月
        OFS = FS =,
    }
    功能date2time(日期,一,周一){
        拆分(日期,/)
        问= 1 +(指数(月,[2]) - 1)/ 4
        返回mktime(一个[1],问,一个[3]0 0 0)
    }
    函数ABS(N){
        返回否℃的? -n:N
    }
    功能diff_days(D1,D2,三角洲){
        增量= date2time(D1) - date2time(D2)
        返回INT(ABS(增量)/ 86400)
    }    {打印$ 0 diff_days($ 2,$ 3)天}

  P1,2013 /月/ 9,2013 /月/ 14,5天
P2,2013 /七月/ 14,2013 /七月/ 6,8天
P3,2013 /七月/ 7,2013 /七月/ 5,2天

I would need your help.

File with only date,

file.txt

P1,2013/jul/9,2013/jul/14 
P2,2013/jul/14,2013/jul/6 
P3,2013/jul/7,2013/jul/5 

display output like this

P1,2013/jul/9,2013/jul/14,5days
P2,2013/jul/14,2013/jul/6,8days 
P3,2013/jul/7,2013/jul/5,2days

解决方案

awk '
    BEGIN {
        months = "jan feb mar apr may jun jul aug sep oct nov dec"
        OFS = FS = ","
    }
    function date2time(date,     a,mon) {
        split(date, a, "/")
        mon = 1 + (index(months, a[2])-1)/4
        return mktime(a[1] " " mon " " a[3] " 0 0 0")
    }
    function abs(n) {
        return n<0 ? -n : n
    }
    function diff_days(d1,d2,    delta) {
        delta = date2time(d1) - date2time(d2)
        return int(abs(delta)/86400)
    }

    { print $0, diff_days($2, $3) "days" }
'

P1,2013/jul/9,2013/jul/14 ,5days
P2,2013/jul/14,2013/jul/6 ,8days
P3,2013/jul/7,2013/jul/5 ,2days

这篇关于从awk的文件计算$ 2,$ 3之间的时间差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆