首页 > 解决方案 > 在 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 脚本中执行此操作?

标签: 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.shchmod +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

推荐阅读