linux awk 时间函数,关于shell:如何在awk脚本中进行日期/时间计算和格式化?

我有一个文件test.txt,有多个记录,如下所示。

100,200,300,08-May-2012 11:24:25

100,400,300,25-May-2012 09:24:25

现在,我想使用以下"格式"输出数据:

$1,$2,$3,$4,$4+30days,$4+60days,$4+90days

我怎样才能用awk来做到这一点?

你想什么?这是你使用variant of Unix?你有一个可用的GNU awk,例如?它使大差分时操作的功能,因为GNU awk安切洛蒂其他学院awk没有变异。

是的,我要帮助utility.please呆子!!

你想什么?你有工具;手动文件如何使用他们,什么你想做的是一个简单的应用gawk什么是记录在手册。

script.awk文件

function map_month(m)

{

if (m ~ /[jJ][aA][nN]/) return 1;

if (m ~ /[fF][eE][bB]/) return 2;

if (m ~ /[mM][aA][rR]/) return 3;

if (m ~ /[aA][pP][rR]/) return 4;

if (m ~ /[mM][aA][yY]/) return 5;

if (m ~ /[jJ][uU][nN]/) return 6;

if (m ~ /[jJ][uU][lL]/) return 7;

if (m ~ /[aA][uU][gG]/) return 8;

if (m ~ /[sS][eE][pP]/) return 9;

if (m ~ /[oO][cC][tT]/) return 10;

if (m ~ /[nN][oO][vV]/) return 11;

if (m ~ /[dD][eE][cC]/) return 12;

return 0;

}

function cvt_timestamp(str,     t, a)

{

split(str, a, /[- :]/)

a[2] = map_month(a[2])

#print a[3]"" a[2]"" a[1]"" a[4]"" a[5]"" a[6]

t = mktime(a[3]"" a[2]"" a[1]"" a[4]"" a[5]"" a[6])

#print t

return t

}

function fmt_timestamp(t)

{

return strftime("%d-%b-%Y %H:%M:%S", t)

}

BEGIN { FS = OFS ="," }

{

tm = cvt_timestamp($4);

t0 = fmt_timestamp(tm +  0 * 86400)

t1 = fmt_timestamp(tm + 30 * 86400)

t2 = fmt_timestamp(tm + 60 * 86400)

t3 = fmt_timestamp(tm + 90 * 86400)

print $1, $2, $3, t0, t1, t2, t3

}

也许有更好的方法来做数字映射的月份缩写;有了它。使用awk中的函数与使用函数的任何其他语言中的函数一样有价值。示例data文件

100,200,300,08-May-2012 11:24:25

100,400,300,25-May-2012 09:24:25

100,400,300,15-Sep-2012 09:24:25

100,400,300,29-Feb-2012 09:24:25

号示例输出

$ gawk -f script.awk data

100,200,300,08-May-2012 11:24:25,07-Jun-2012 11:24:25,07-Jul-2012 11:24:25,06-Aug-2012 11:24:25

100,400,300,25-May-2012 09:24:25,24-Jun-2012 09:24:25,24-Jul-2012 09:24:25,23-Aug-2012 09:24:25

100,400,300,15-Sep-2012 09:24:25,15-Oct-2012 09:24:25,14-Nov-2012 08:24:25,14-Dec-2012 08:24:25

100,400,300,29-Feb-2012 09:24:25,30-Mar-2012 10:24:25,29-Apr-2012 10:24:25,29-May-2012 10:24:25

$

如果您决定要以不同的方式处理时区中的开关,这就是您的特权;您可以修复代码。

多谢乔纳森……这真的很管用。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值