在大文件中按天替换日期

时间:2018-10-26 20:48:57

标签: bash awk

我有一个大文件,其条目格式为

20|27.10.2017 19:51:35.764000|354949

20|28.10.2017 17:44:37.095000|863925

20|31.10.2017 09:00:47.578000|438836

中间的条目表示日期(欧洲格式)和时间。

我想用以下内容代替

20|2|354949

20|3|863925

20|6|438836

并将其存储在新文件中, 现在,中间的条目表示(例如)2017年10月25日至日期之间的天数。

让问题更清楚:

我想替换表格

的日期时间条目

28.10.2017 17:44:37.095000

乘以2017年10月25日至(在此示例中)2017年10月28日之间的天数,例如(在此示例中)3。

任何人都可以给我一个有关如何有效执行此操作的提示(该文件有大约1500百万个条目...)

谢谢!

1 个答案:

答案 0 :(得分:2)

awk来营救!

$ awk 'BEGIN {FS=OFS="|"; base=mktime("2017 10 25 00 00 00")} 
             {split($2,t,"[. :]");
              secs=mktime(t[3]" "t[2]" "t[1]" "t[4]" "t[5]" "t[6])-base 
              $2=int(secs/(60*60*24))}1' file

20|2|354949    
20|3|863925
20|6|438836

将日期/时间和基线转换为秒,进行比较并转换为天。