使用awk,如何将日期转换为周和季度?
Using awk, how to convert dates to week and quarter?
使用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
awk解决方案:
awk -F';' '{ split(,d,"-"); w = strftime("%W", mktime(d[1]" "d[2]" "d[3]" 00 00 00"));
q = int((d[2]+2)/3);
print [=10=],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(,d,"-")
- 用分隔符 -
拆分第二个字段 (date
)
mktime(datespec)
- 将 datespec(日期规范)转换为时间戳
strftime("%W", mktime(d[1]" "d[2]" "d[3]" 00 00 00"))
- 根据%W
(一年中的周数)
[=49]格式化mktime()
函数返回的时间=]
q = int((d[2]+2)/3)
- 计算 quarter 数。该季度相当于3个月。所以我们将使用 3 作为除数。
https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html
使用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
awk解决方案:
awk -F';' '{ split(,d,"-"); w = strftime("%W", mktime(d[1]" "d[2]" "d[3]" 00 00 00"));
q = int((d[2]+2)/3);
print [=10=],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(,d,"-")
- 用分隔符-
拆分第二个字段 (mktime(datespec)
- 将 datespec(日期规范)转换为时间戳
[=49]格式化strftime("%W", mktime(d[1]" "d[2]" "d[3]" 00 00 00"))
- 根据%W
(一年中的周数)mktime()
函数返回的时间=]q = int((d[2]+2)/3)
- 计算 quarter 数。该季度相当于3个月。所以我们将使用 3 作为除数。
date
)
https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html