在两个时间戳之间从日志文件中剪切日志(而不是复制)

在两个时间戳之间从日志文件中剪切日志(而不是复制)

我有一个非常巨大的 2 GB 的 access.log 文件,其中包含 apache 访问日志。其中的日期时间格式如下:

2015年5月04日:02:15:25

我想将日志从这个大文件剪切(而不仅仅是复制)到两个时间戳之间的另一个文件。我正在尝试使用“cat”和“sed”的组合,但最终只能复制而不是剪切。请指教。我有 HP-UX 服务器,access.log 文件是动态文件,即访问日志不断附加到文件末尾(因为 apache URL 不断被用户点击)

提前致谢

答案1

我编写了以下脚本,它读取dates.txt所有日期并将其转换为EPOC(timstamp)并打印它们,当然我是用 编写的bash,您需要更改文件名并将输出管道输出到新的日志文件:

#!/bin/bash
declare month=(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
while IFS= read -r line <&3; do

    sec1=`echo $line |awk -F/ '{print $1}'`
    sec2tmp=`echo $line |awk -F/ '{print $2}'`
    sec3=`echo $line |awk -F/ '{print $3}' | awk -F: '{print $1}'`
    timesec=`echo $line |awk -F/ '{print $3}' |awk -F: 'BEGIN{ OFS=":";}{print $2,$3,$4}'`
    for i in `seq 0 11`
    do 
        tmp=${month[$i]}
        real_month=`echo $i+1 |bc`
        if [[ "$tmp" =  "$sec2tmp" ]]
        then 

            sec2=$real_month
        fi;

        generated_time="$sec1/$sec2/$sec3 $timesec"
        echo `date --date="$generated_time"  +"%s"`
    done
done 3< dates.txt

相关内容