如何使用shell脚本在文本文件中查找大于或等于特定日期的第一个日期

时间:2014-01-14 03:50:24

标签: shell

past_date='2013-11-14'
initial_time=$(grep -o -m1  "$past_date [0-9][0-9]:[0-9][0-9]:[0-9][0-9]" logfile.txt)

/ *这里我试图找到第一次出现的日期大于或等于'2013-11-14',上面的代码我试过,它只给出那个特定的文件行,如果那个日期未找到它必须提供大于2013 - 11 - 14日期的下一个日期* /

3 个答案:

答案 0 :(得分:0)

使用awk

past_date='20131114'
awk '{d=$1;gsub(/-/,"",d);if (d>=p) {print;exit}}' p=$past_date logfile

2013-11-15 15:45:40 Starting agent install process

答案 1 :(得分:0)

如果你使用bash,那么你可能想尝试类似:

past_date='2013-11-14'
initial_time=$(grep -oP '\d{4}-\d\d-\d\d \d\d:\d\d:\d\d' < logfile.txt | \
while read LINE ; do if [ "$LINE" '>' "$past_date" ]; then echo $LINE; break; fi ; done)

答案 2 :(得分:0)

while read line
do
initial_time=`echo $line | sed -e 's/\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\).*/\1/'`
file_content_date=`date -d "$initial_time" +%Y%m%d`
comparison_past_date=`date -d "$past_date" +%Y%m%d`
if [ $comparison_past_date -le $file_content_date ]; then
comparison_start_date=`date -d "$file_content_date" +%Y%m%d`
break
 fi
done < logfile.txt
fi