Bash脚本-过滤掉时间戳为最后1HR的行



尝试通过比较(当前时间- 1小时)的前两列来过滤文件中的行

文件数据:

09:38:41 AM col3 col4 ...
11:32:00 AM col3 col4 ...
11:58:48 AM col3 col4 ...
12:00:01 AM col3 col4 ...
12:55:58 PM col3 col4 ...
01:51:56 PM col3 col4 ...
02:26:40 PM col3 col4 ...
03:18:54 PM col3 col4 ...

因此,如果执行时间为14:01:00,它应该获取13:00:00之间的行到13:59:59

01:51:56 PM col3 col4 ...

不确定要应用的条件,这是我的基本进展:

varDataFile="fileName.txt"
varCurTime=$(date +"%I:%M:%S %p")
while read line
do
varCurLine=$(echo $line | awk '{print $1 " " $2}')
if [[ <condition>]]; then
echo $Line
fi
done < $varDataFile

如果您的文件只有有HH:MM:SS(即使有AM/PM),它将在午夜之后失败,因为系统假设当前日期并将一些行读取为未来。除此之外……

如果文件不大,我喜欢将所有日期/时间值转换为纪元以来的秒数,以便进行简单的比较。

now=$(date +%s)
while read t ap x
do l=$(date --date="$t$ap" +%s)
(( 3600>(now-l) )) && echo "$t $ap $x"
done

一个read和一个date在一个大文件的每一行上加起来可能是有问题的。

对于一个非常大的文件,你最好使用像awk这样的东西,在这种情况下,我希望你能访问时间函数。

最新更新