使用awk,如何将日期转换为周和季度?

时间:2017-05-27 08:56:24

标签: 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

1 个答案:

答案 0 :(得分:3)

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
  • split($2,d,"-") - 按分隔符date分割第二个字段(-

  • mktime(datespec) - 将 datespec (日期说明)转换为时间戳

  • strftime("%W", mktime(d[1]" "d[2]" "d[3]" 00 00 00")) - 根据mktime()(一年中的周数)格式化%W函数返回的时间

  • q = int((d[2]+2)/3) - 计算季度号码。该季度相当于 3 个月。因此我们将使用3作为除数。

https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html