从awk的文件计算$ 2,$ 3之间的时间差 [英] Calculate date difference between $2,$3 from file in awk
本文介绍了从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屋!
查看全文