我想把日期的一切开始直到日期结束。这是我目前的代码
for z in *.log; do cat /test/data/$z | grep "`date --date="yesterday" +%m\/\%d\/\%y`" > /data/demo.log; done
我的代码的问题是它不会grep新行例如
原始数据
> [12/28/13 17:57:15.702]: start
> test_miss
> [12/28/13 17:57:15.702]: end
> [12/29/13 17:57:15.702]: new day
之后
> [12/28/13 17:57:15.702]: start
> [12/28/13 17:57:15.702]: end
期望的输出
> [12/28/13 17:57:15.702]: start
> test_miss
> [12/28/13 17:57:15.702]: end
我如何从我约会的日期开始直到我的约会结束,谢谢你,
答案 0 :(得分:1)
使用gawk,例如
yest=$(date --date="yesterday" +%m\/\%d\/\%y`")
for z in *.log; do
awk "/$yest/{inside= !inside;print;next;} {if (inside) print;}" $z
done
我是using a variable inside
作为布尔标志,在遇到$yest
(昨天的日期)时切换。
答案 1 :(得分:0)
试试这个
cat logfile | awk '$0 >= "xx/xx/xx 00:00" && $0 <= "yy/yy/yy 00:00"'
或
cat /var/log/messages | awk '$0 >= "Dec 30 14:45:01" && $0 <= "Dec 30 14:50:01"'
NOTE - The timestamps are at the beginning of each line and you need to include the correct
timestamp format.
答案 2 :(得分:0)
感谢所有的帮助和提示无论如何这就是我所做的
for z in *.log;
do
yest=$(grep -n "$( date --date="yesterday" +%m\/\%d\/\%y )" /data/log/$z |cut -f1 -d: | head -n 1) ;
today=$(grep -n "$( date --date="today" +%m\/\%d\/\%y )" /data/log/$z |cut -f1 -d: | head -n 1) ;
if [[ -z "$today" ]]
then
awk "NR>="$yest"" "/data/log/$z" > /data/test/$z;
else
today=$(($today - 1)) ;
awk "NR>="$yest"&&NR<=$today" "/data/log/$z" > /data/test/$z;
fi
done
我使用grep搜索第一个和最后一个行号,并使用awk捕获其中的所有内容。