我有一个非常巨大的 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