shell - 在 shell 脚本中过滤数据
问题描述
在 jcs.log 文件中,我有以下数据:
Sep 24 20:30:02 2020 Mngmnt aplapl_a 43191001 HARMLESS 0 abc
Sep 25 20:30:23 2020 Mngmnt aplapl_a 43191002 HARMLESS 0 xyz
Sep 25 21:00:01 2020 Mngmnt aplapl_a 43191001 HARMLESS 0 123
Sep 25 21:00:01 2020 Mngmnt aplapl_a 43191001 HARMLESS 0 456
Sep 25 21:00:37 2020 Mngmnt aplapl_a 43191002 HARMLESS 0 funny
Sep 26 21:01:26 2020 Mngmnt aplapl_a 43191002 HARMLESS 0 test1
我有 2 个变量:
startTime="2020-09-25 21:00:00"
endTime="2020-09-25 23:00:00"
我想编写一个 shell 脚本,它将遍历每一行,它应该返回我的行,时间是从 $startTime 到 $endTime
如何在 shell 脚本中执行此操作?
解决方案
这是一个硬连线解决方案,其中包含您的变量和日志文件名。
#!/bin/bash
startTime="2020-09-25 21:00:00"
endTime="2020-09-25 23:00:00"
while read -r line
do
current=$(date -d"$(echo $line|awk '{print $1,$2,$3,$4}')" "+%Y-%m-%d %H:%M:%S")
if [[ $current = $startTime || $current > $startTime ]] && [[ $current = $endTime || $current < $endTime ]]; then
echo $line
fi
done <jcs.log
当另存为 时logie.sh
,chmod +x logie.sh
它会输出以下内容:
./logie.sh
Sep 25 21:00:01 2020 Mngmnt aplapl_a 43191001 HARMLESS 0 123
Sep 25 21:00:01 2020 Mngmnt aplapl_a 43191001 HARMLESS 0 456
Sep 25 21:00:37 2020 Mngmnt aplapl_a 43191002 HARMLESS 0 funny
推荐阅读
- node.js - 通过 Kubernetes Deployment YML 将参数传递给 Docker 容器
- flutter - 将 bool 转换为 int 以在 Flutter 小部件中显示数字
- javascript - reactJS - JSX 映射数组以形成元素,但将每四个元素分组
- css - 反应日期坏了 - 不识别 css?
- reactjs - 为什么我的生产反应应用程序返回 JSON 而不是 html
- python - Discord.py 文本分配角色
- python - cronjob 没有在树莓零上运行
- android - 在新版本的 android studio 4.1.x 中聚焦时更改 EditText 背景基线颜色
- python - 两个时间序列之间的相似性
- javascript - 逆表搜索