我有一个file.txt格式为 with 的行HH:MM:SS:
00:05:50
01:40:10
00:23:09
00:34:02
我想打印出显示时间在 30 分钟和 1 小时 20 分钟之间的行。
这是我的尝试:
LINES=`grep '(00:[3-5][0-9]:[0-5][0-9]|01:[01][0-9]:[0-5][0-9]|01:20:00)' file.txt`
echo "$LINES"
然而,这并没有显示任何结果。我究竟做错了什么?
谢谢!
另一种选择,使用awk:
LINES=`awk '{ if ( $0 >= "00:30:00" && $0 <= "01:20:00") print $0 }' file.txt`
这是因为 24 小时固定格式的时间也遵循 ASCII 的词汇顺序。
或者更短,正如@Kent 慷慨建议的那样:
LINES=`awk '$0 >= "00:30:00" && $0 <= "01:20:00"' file.txt`
尝试以下
LINES=`egrep '(00:[3-5][0-9]:[0-5][0-9])|(01:[01][0-9]:[0-5][0-9]|01:20:00)' file.txt`
另一个awk选项。将文件内容转换为分钟,并与以分钟为单位提供的边界逐行比较
awk -F: -v ll=30 -v ul=80 '{minutes=60*$1 + $2 + $3/60};
minutes >= ll && minutes <= ul' file.txt