假装有一个简单的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
组合原始文件和派生文件。有一种更简单的方法,不是吗?
答案 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
但希望你能得到这个想法,如果它不完全是你想要的。