我有一个大约10MM记录的文件。这是我的dateSample SRC文件:unix awk从日期字段中减去整数字段
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上更新日期)遇到真正的麻烦,并在过去的几天中一直在徒劳地搜索。
这是不是一个零前缀和丢弃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
所以基本上,我需要的是一个高性能的方式输出。
预先感谢您的任何指导/重写。
干杯
真棒回应...感谢您的详细解释。 strftime-mktime组合非常好,工作速度超快。 也感谢“手工”版本的完整性。 谢谢你的帮助。欢呼声 – sigmazen
不客气,我很高兴它解决了你的问题。 – randomir