尝试通过比较(当前时间- 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
这样的东西,在这种情况下,我希望你能访问时间函数。