【发布时间】:2017-12-31 23:35:45
【问题描述】:
我有一个包含大约 10MM 记录的文件。这是我的 dateSample src 文件:
0000000566 2017/01/01 0
0000000055 2017/01/01 0
0000000109 2017/01/01 1
0000000940 2017/01/01 0
0000000566 2017/01/01 1
0000000055 2017/01/01 1
0000000109 2017/01/01 2
我基本上需要减去日期中月份的最后一个整数值并打印不带整数的新值,因此:
0000000566 2017/01/01
0000000055 2017/01/01
0000000109 2016/12/01
0000000940 2017/01/01
0000000566 2016/12/01
0000000055 2016/12/01
0000000109 2016/11/01
我在使用日期(或测试时在 macOS 上使用 gdate)时遇到了真正的问题,并且在过去几天里一直在徒劳地搜索。
它要么以零为前缀,要么删除 m 和 d 值:
awk '{ print (gdate -d $2 +"%Y/%m/%d") }' <$src
或以零为后缀并从年份中减去整数:
awk '{ print (gdate -d $2 +-$3 months +"%Y/%m/%d") }' <$src
或者把整个东西混在一起仍然是不正确的:
awk '{ print gdate -d (gdate -d $2 +"%Y/%m/%d") +-$3 months +"%Y/%m/%d" }' <$src
我发现了以下出色的回应: Increment date with AWK for few days and months 这正是我想要的,但它运行得非常非常慢,我假设这是因为命令中的命令。
这是当前的 awk(我正在使用 gdate,因为我现在在 macOS BSD 上运行):
awk '{ cmd=" gdate -d \"$(gdate -d \""$2"\")+\"-"$3"\"months\" \"+%Y/%m/%d\" ";
cmd | getline fmtDate; close(cmd);
print $1, fmtDate
}' <$src
所以我基本上需要以高效的方式输出。
提前感谢您的任何指导/重写。
干杯
【问题讨论】: