改变月份的日期在AWK数字格式 [英] change the date of month in number format in awk

查看:558
本文介绍了改变月份的日期在AWK数字格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

文件1

P1,06/Jul/2013,09/Jul/2013 
P2,06/Jul/2013,10/Jul/2013 
P3,06/Jul/2013,15/Jul/2013 

输出继电器,我想是这样的:

Ouput i want like this:

P1,06/07/2013,09/07/2013,3days
P2,06/07/2013,10/07/2013,4days 
P3,06/07/2013,15/07/2013,9days 

有人帮助是需要为这个请

some one help is need for this please

推荐答案

这答案在很大程度上依赖于BSD日期格式可在Mac

This answer is heavily dependent on BSD date formatting available on a mac

#!/usr/bin/awk -f

BEGIN { FS=" " }

{
    split( $0, arr, "," )
    ts1 = date2ts( arr[ 2 ] )
    ts2 = date2ts( arr[ 3 ] )
    days = (ts2-ts1)/86400
    date1 = ts2date( ts1 )
    date2 = ts2date( ts2 )
    printf( "%s,%s,%s,%d days\n", arr[ 1 ], date1, date2, days )
}

function runCmd( cmd ) {
    cmd | getline output
    close( cmd )
    gsub( "\"", "", output )
    return output
}

function date2ts( date ) {
    return runCmd( sprintf( \
        "date -j -f\\\"%%d/%%b/%%Y\\\" \\\"%s\\\" +\\\"%%s\\\"", date ) )
}

function ts2date( ts ) {
    return runCmd( sprintf( \
        "date -j -f\\\"%%s\\\" \\\"%s\\\" +\\\"%%d/%%m/%%Y\\\"", ts ) )
}

我得到以下的输出:

I get the following output:

P1,06/07/2013,09/07/2013,3days
P2,06/07/2013,10/07/2013,4days
P3,06/07/2013,15/07/2013,9days

这篇关于改变月份的日期在AWK数字格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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