截取每小时随机的100条日志的shell脚本

发布时间:2020-07-25编辑:脚本学堂
截取每小时随机的100条日志

要求:取出一天9:00~21:00每小时的随机100条日志。

用/var/log/messages举例。

复制代码 代码如下:

#!/usr/bin/bash
#取出一天9:00~21:00每小时的随机100条日志。用/var/log/messages举例。
#日志文件是一天内的日志,如果日志文件中包含多天的日志,还需进行一些修改!否则是会有些错误!

LOGFILE="/var/log/messages"
CURDIR=`pwd`
DATE=`date '+%Y_%m_%d'`
SAVEFILE="$CURDIR/day_random_log.$DATE"

seek_date(){
 startline=`linuxjishu/13830.html target=_blank class=infotextkey>awk -F'[ :]' -v line=$1 '$3 == line {print NR;exit}' $LOGFILE`
 endline=`awk -F'[ :]' -v line=$1 '$3 == line {endline=NR}END{print endline}' $LOGFILE`
}

exec 5>&1
exec > $SAVEFILE

for i in `seq 9 21`
do
 seek_date $i
 awk -v startnum=$startline -v endnum=$endline -f $CURDIR/hour_log.awk $LOGFILE
done

exec 1>&5
exec 5>&-

复制代码 代码如下:

#!/usr/bin/awk
#随机抽出文本中的100条日志
BEGIN{
 delete per_hour_log
 line=0
}

NR >= startnum && NR <= endnum{
 line++
 per_hour_log[line]=$0
}

END{
 srand()
 if (line < 100)
 for ( i in per_hour_log)
  print per_hour_log[i]
 else
 {sum=0
 while (sum <= 99){
 linenum=int ( line * rand() )+1
 if ( linenum in per_hour_log ) {
 print per_hour_log[linenum]
 delete per_hour_log[linenum]
 sum++
 }
 }
 }
}

您可能感兴趣的文章:
shell截取字符串的例子
有关字符串截取的shell脚本(多个方法)
shell 字符串的处理(截取,连接,匹配,替换,翻转)
shell字符串截取的几种方法
使用awk截取某区域的数据的例子
使用awk截取某时间段内的日志的单行命令
有关shell中字符串截取的方法总结
awk截取某区域数据
使用awk截取日志-抽取条件在下面