最近由于机房安全规范的要求,需要第三方软件进行系统安全审计,linux操作系统默认有登陆、定时任务等审计,要查看其日志的时候发现时间格式为unix时间戳格式,阅读起来很不方便,便想将其中的时间戳转换成为普通时间进行查看

网上普遍的做法为使用perl脚本在阅读时进行转换

cat time.pl

s/(1\d{9})/localtime($1)/e

然后使用管道命令进行转换

   less,more,tail -f

less /var/log/audit/audit.log | perl -p time.pl
more /var/log/audit/audit.log | perl -p time.pl
tail -f /var/log/audit/audit.log | perl -p time.pl

使用这些命令来查看起来不太方便,不像vim查看的全面


于是就写了一个脚本将audit.log中的时间戳转换成普通时间写到新的文件中,以下为脚本代码

#!/bin/bash
FILE=/var/log/audit/audit.log
cat $FILE |while  read LINE
do
    Udate=`echo $LINE|awk -F'[(.]+'  '{print $2}'`
    #Udate=`echo $LINE|awk -F. '{print $1}' | awk -F'(' '{print $2}'`
    Cdate=`date -d @$Udate`
    echo $LINE|sed "s/[0-9]\{10\}/$Cdate/"  >> read.audit.log
done

不过代码的执行效率有点低,在1核1G的虚拟机跑2W条记录大约需要2MIN