在awk中处理时间并将输出分享到csv文件中的新列的最佳方法是什么?

时间:2016-03-20 04:53:19

标签: bash awk

假装有一个简单的csv文件:

date,miles,time,min
2016-01-01,5.15,0:21:10,0:03:30
2016-01-03,15.30,1:10:00,0:03:45
2016-02-02,08.37,0:31:24,0:03:22

假设我想再添加两列,其中H:M:S次转换为十进制数,其中1.0等于一小时。如何用awk高效实现这一目标?目前我将此文件的一个字段输出到另一个awk命令,其中我使用:作为字段分隔符,使用一些算术(例如字段2除以60)来获取十进制数,将结果保存到文件中,然后使用paste组合原始文件和派生文件。有一种更简单的方法,不是吗?

1 个答案:

答案 0 :(得分:2)

由于您没有向我们展示您的预期输出,这可能是您想要的,也可能不是:

$ cat tst.awk
BEGIN { FS=OFS="," }
{
    if (NR==1) {
        tdec = "time_dec"
        mdec = "min_dec"
    }
    else {
        split($3,a,/:/); tdec = a[1] + a[2]/60 + a[3]/3600
        split($4,a,/:/); mdec = a[1] + a[2]/60 + a[3]/3600
    }
    print $0, tdec, mdec
}

$ awk -f tst.awk file
date,miles,time,min,time_dec,min_dec
2016-01-01,5.15,0:21:10,0:03:30,0.352778,0.0583333
2016-01-03,15.30,1:10:00,0:03:45,1.16667,0.0625
2016-02-02,08.37,0:31:24,0:03:22,0.523333,0.0561111

但希望你能得到这个想法,如果它不完全是你想要的。