【发布时间】:2018-03-11 09:24:47
【问题描述】:
在我的 bash 脚本中,我想添加一个代码来删除所有早于 x 天的条目。
- 为了简化这个问题,我分为三个部分。 2部分是 完成寻找第三部分的答案。) a) 查找最新的日志日期 - 完成 b) 评估最早的纪元时间。 (此纪元之前的所有条目 时间应该被删除) - 完成
No_OF_DAYS=2
One_Day=86400000
Latest_Time=`find . -name '*.tps' -exec sed '/endTime/!d; s/{//; s/,.*//' {} + | sort -r | head -1 | cut -d: -f2` #latest epoch time Days_in_Epoch=$(($One_Day * $No_OF_DAYS)) Earliest_Time=$((Latest_Time - $Days_in_Epoch)) #earliest epoch time
c) 删除所有早于评估最早时间的日志条目。
PS:
- 有多个文件,分布在不同的子文件夹中。
- 所有扩展名为
".tps"的文件。 - 时间采用纪元格式。将考虑 endTime 进行计算。(
"endTime":1488902735220) - 样本数据
代码:
{"endTime":1488902734775,"startTime":1488902734775,"operationIdentity":"publishCacheStatistics","name":"murex.risk.control.excesses.cache.CacheStatisticsTracer","context":{"parentContext":{"id":-1,"parentContext":null},"data":[{"value":"excessCacheExcessKeysToContexts","key":"name"},{"value":"0","key":"hits"},{"value":"0","key":"misses"},{"value":"0","key":"count"},{"value":"0","key":"maxElements"},{"value":"0","key":"evictions"},{"value":"N/A","key":"policy"}],"id":0}}
{"endTime":1488902735220,"startTime":1488902735220,"operationIdentity":"publishCacheStatistics","name":"murex.risk.control.excesses.cache.CacheStatisticsTracer","context":{"parentContext":{"id":-1,"parentContext":null},"data":[{"value":"excessCacheExcessKeysToContexts","key":"name"},{"value":"0","key":"hits"},{"value":"0","key":"misses"},{"value":"0","key":"count"},{"value":"0","key":"maxElements"},{"value":"0","key":"evictions"},{"value":"N/A","key":"policy"}],"id":8}}
{"endTime":1488902735550,"startTime":1488902735550,"operationIdentity":"publishCacheStatistics","name":"murex.risk.control.excesses.cache.CacheStatisticsTracer","context":{"parentContext":{"id":-1,"parentContext":null},"data":[{"value":"excessCacheContextsToExcessIds","key":"name"},{"value":"0","key":"hits"},{"value":"0","key":"misses"},{"value":"0","key":"count"},{"value":"0","key":"maxElements"},{"value":"0","key":"evictions"},{"value":"N/A","key":"policy"}],"id":9}}
例如:
一)
最新纪元时间 = 1488902735550
b)
最早的纪元时间 = 1488902735220
问题:现在我正在寻找删除所有比最早纪元时间更早/更少的条目的命令。在上面的例子中,第一行应该被删除。
感谢任何帮助/建议。谢谢Linux
【问题讨论】:
-
请注意,您正在处理的数据是 JSON,它可能有助于解析它而不是使用文本操作工具。
jq是一个从 bash 解析 JSON 的便捷工具 -
嘿,我在他最后一个问题上告诉他了。
-
@ankit,您需要使用 awk 或 perl 或 python 之类的语言,您可以在其中根据算术条件过滤行。 sed 不是为此而构建的。
-
感谢大家的回复。我并不是专门查看 sed 命令。我想我可以在 bash 脚本中使用 awk。问题是我不能使用其他工具,因为这是我的 bash 脚本的一小部分。所以没有其他方法可以在 bash 脚本中实现它??
-
使用文本处理工具的主要问题是,一旦数据格式发生变化,您的解决方案可能会中断。第二个问题是,在同等知识水平下,使用 JSON 解析器的人将比使用文本处理工具的人更有效率。当然你得先学会使用 JSON 工具,但真正上手几乎不需要超过 30 分钟
标签: bash