使用sed或awk从日志中删除两个日期时间戳之间的行?

使用sed或awk从日志中删除两个日期时间戳之间的行?,awk,sed,Awk,Sed,日志文件中的$3和$4列有一个日期时间戳,我想使用sed或类似命令就地编辑文件,以删除超过24小时的记录 2015-07-29 04:30:12 2015-07-29 04:30:21 2015-07-29 04:30:21 2015-07-29 04:30:21 2015-07-29 04:31:42 我使用类似的方法成功地搜索日期之间的记录 LAST24HR=$(date "+%Y-%m-%d %H:%M:%S" -d "-24 hour") NOW=$(date "+%Y-%m-%d %

日志文件中的$3和$4列有一个日期时间戳,我想使用
sed
或类似命令就地编辑文件,以删除超过24小时的记录

2015-07-29 04:30:12
2015-07-29 04:30:21
2015-07-29 04:30:21
2015-07-29 04:30:21
2015-07-29 04:31:42
我使用类似的方法成功地搜索日期之间的记录

LAST24HR=$(date "+%Y-%m-%d %H:%M:%S" -d "-24 hour")
NOW=$(date "+%Y-%m-%d %H:%M:%S")

awk '$3" "$4>=from&&$3" "$4<=to' from="$LAST24HR" to="$NOW"
LAST24HR=$(日期“+%Y-%m-%d%H:%m:%S“-d”-24小时”)
现在=$(日期“+%Y-%m-%d%H:%m:%S”)
awk'$3''$4>=从&&$3''$4
  • 仅打印范围内的记录
  • 对于“就地”,如果使用awk或使用重定向和临时文件

我假设您的“记录早于24小时”,但不完全是“中间日期”,因为您将当前日期作为参考,我不怀疑有更新的条目。

sed不是这种情况下的最佳工具,因为is几乎没有比较功能(与其他相比)。我建议,在这种情况下,使用awk而不是可能的副本似乎是,感谢社区链接回gawk就地编辑。我能够在我们的场景中安装并测试它。谢谢美好的注意:您可能可以跳过
{print}
部分,因为评估为true的条件会触发awk的默认操作:
{print$0}
,即打印当前行。检查变量名称-设置时为
DaRef
,测试时为
DateRef
。您确定字符串连接优先于比较吗?我将把测试写成
($3”“$4)>=DateRef
,以使其明确-即使不需要,也有助于提高清晰度。我很难阅读和理解为什么
“var=val”
var=“val”
更可取,但可能只有我一个人。谢谢您的反馈!我一直在寻找gawk就地编辑,感谢您提供了该文章的链接。我们正在用我们的工作流场景测试gawk的编译。谢谢你!
awk -v "DateRef=$( date "+%Y-%m-%d %H:%M:%S" -d "-24 hour" )" '( $3 " " $4 ) >= DateRef { print }'