Date 使用awk,如何将日期转换为周和季度?
使用awk,如何将日期(yyyy-mm-dd)转换为周和季度(周的第一天设置为星期一) 输入:Date 使用awk,如何将日期转换为周和季度?,date,awk,date-formatting,week-number,date-manipulation,Date,Awk,Date Formatting,Week Number,Date Manipulation,使用awk,如何将日期(yyyy-mm-dd)转换为周和季度(周的第一天设置为星期一) 输入: a;2016-04-25;10 b;2016-07-25;20 c;2016-10-25;30 d;2017-02-25;40 想要的输出: a;2016-04-25;10;2016-w17;2016-q2 b;2016-07-25;20;2016-w30;2016-q3 c;2016-10-25;30;2016-w43;2016-q4 d;2017-02-25;40;2017-w8;2017-q1
a;2016-04-25;10
b;2016-07-25;20
c;2016-10-25;30
d;2017-02-25;40
想要的输出:
a;2016-04-25;10;2016-w17;2016-q2
b;2016-07-25;20;2016-w30;2016-q3
c;2016-10-25;30;2016-w43;2016-q4
d;2017-02-25;40;2017-w8;2017-q1
awk解决方案:
awk -F';' '{ split($2,d,"-"); w = strftime("%W", mktime(d[1]" "d[2]" "d[3]" 00 00 00"));
q = int((d[2]+2)/3);
print $0,d[1]"-w"w,d[1]"-q"q}' OFS=';' file
输出:
a;2016-04-25;10;2016-w17;2016-q2
b;2016-07-25;20;2016-w30;2016-q3
c;2016-10-25;30;2016-w43;2016-q4
d;2017-02-25;40;2017-w08;2017-q1
-按分隔符拆分第二个字段(拆分($2,d,“-”)
)日期
-将日期规范(日期规范)转换为时间戳mktime(日期规范)
-根据strftime(“%W”,mktime(d[1]“d[2]”d[3]“00”)
(一年中的周数)格式化%W
函数返回的时间mktime()
-计算季度数。本季度相当于3个月。我们用3作为除数q=int((d[2]+2)/3)
awk -F';' '{ split($2,d,"-"); w = strftime("%W", mktime(d[1]" "d[2]" "d[3]" 00 00 00"));
q = int((d[2]+2)/3);
print $0,d[1]"-w"w,d[1]"-q"q}' OFS=';' file
输出:
a;2016-04-25;10;2016-w17;2016-q2
b;2016-07-25;20;2016-w30;2016-q3
c;2016-10-25;30;2016-w43;2016-q4
d;2017-02-25;40;2017-w08;2017-q1
-按分隔符拆分第二个字段(拆分($2,d,“-”)
)日期
-将日期规范(日期规范)转换为时间戳mktime(日期规范)
-根据strftime(“%W”,mktime(d[1]“d[2]”d[3]“00”)
(一年中的周数)格式化%W
函数返回的时间mktime()
-计算季度数。本季度相当于3个月。我们用3作为除数q=int((d[2]+2)/3)
您尝试了什么?我会使用
日期
来表示它(ISO周、周日/周一开始周等);do echo-n$f1;echo-n“;echo-n$f2;echo-n“;日期-d$f2+%V;完成<输入。。。。但是没有得到正确的报价。。不使用awk…:p@Markus添加您试图提问的代码而不是注释。。。请参见指定分隔符,您尝试了什么?我会使用日期
来表示它(ISO周、周日/周一开始周等);do echo-n$f1;echo-n“;echo-n$f2;echo-n“;日期-d$f2+%V;完成<输入。。。。但是没有得到正确的报价。。不使用awk…:p@Markus添加您试图提问的代码而不是注释。。。请参见“指定”delimiters@EdMorton,是的,刚刚从我的“视野区域”中漏掉了@EdMorton,是的,刚刚从我的“视野区域”中漏掉了