bash - 如何从 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}
当我在终端中运行脚本时,它卡住了,没有结果。
解决方案
目前尚不清楚您到底要做什么(与这个小时相比?与 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
您只需添加这些时间戳的字符串比较即可。
推荐阅读
- c - PRQA QAC 在遇到#error 指令后终止
- flutter - 如何使用在 ListView 中构造更高小部件的 FutureBuilder?
- rest - 返回带有变音符号的字符串
- python - 在 python 中用三行绘制时间序列
- nginx - Nginx:将实际转发的 proxy_pass 请求 URI 记录到上游
- go - 从接收函数返回数组长度
- javascript - JS间隔不增加计时器
- ios - 无法在 WebService 调用请求中使用 NSData 强制转换 NSDicationry
- python - 向下滚动不可滚动页面的 Python 脚本
- azure-sdk-js - Azure 资源 NodeJS 应用程序需要交互式登录