首页 > 解决方案 > 如何从 cfg 文件中删除前几个小时的行

问题描述

我想创建 bash 一个 bash 脚本,它会自动检查并删除以前过期的小时数生成的行(cron 选项卡)。行是由系统在我的 cfg 文件中自动生成的。我不想在我的脚本上提供到期日期,因为我只想从我的 cfg 文件中删除过期的行。目前我必须自行打开cfg文件,然后一一删除过期行。我想制作一个为我删除它的脚本。但无法从任何地方找到解决方案。我不太了解bash,awk。但如果完整的脚本应该由专家编写,我将非常感激。这是我的 cfg 文件的示例:

9234170 6287130 0 {enddate=2019-07-30 12:32:05}  
6378500 1306985 0 {enddate=2019-07-30 12:33:22}  
3608791 1579200 0 {enddate=2019-07-30 12:48:12}  
5012948 8975601 0 {enddate=2019-07-30 13:13:51} 

这是我尝试过的代码:

#! /bin/sh
awk '
BEGIN { 
now=systime() # now in epoch time
fn=60*60*24*14 # fortnight in seconds
}
{
dt=$1 " " $2 # create datetime
gsub(/["strftime"]/," ",dt) 
}
mktime(dt)>now-fn
file=var/etc/myfile.cfg  #location of my cfg file

假设当前日期和时间是2019/07/30 13:13:15我希望在 cfg 文件中得到我的结果:

  5012948 8975601 0 {enddate=2019-07-30 13:13:51}

当我在终端中运行脚本时,它卡住了,没有结果。

标签: bashawksed

解决方案


目前尚不清楚您到底要做什么(与这个小时相比?与 14 天前相比?其他什么?)但这是一个开始(使用 GNU awk 进行时间函数):

$ cat tst.awk
BEGIN {
    FS = "[=}]"
    now = strftime("%F %T")
    anHourAgo = strftime("%F %T",systime()-(60*60))
}
{ print $(NF-1) " vs " now " vs " anHourAgo }

$ awk -f tst.awk file
2019-07-30 12:32:05 vs 2019-07-29 17:35:03 vs 2019-07-29 16:35:03
2019-07-30 12:33:22 vs 2019-07-29 17:35:03 vs 2019-07-29 16:35:03
2019-07-30 12:48:12 vs 2019-07-29 17:35:03 vs 2019-07-29 16:35:03
2019-07-30 13:13:51 vs 2019-07-29 17:35:03 vs 2019-07-29 16:35:03

您只需添加这些时间戳的字符串比较即可。


推荐阅读