背景
最近一直在学习Redis相关的知识.
其中遇到了一个redis monitor的命令
但是这里有一个问题是:
原生命令查询出来的时间是Unix时间戳格式的.
不太好发现查看与进行对照.
所以今天中午就进行了简单的学习,希望能够最简单的方式进行转换.
思路
认为awk命令一个就够了.
但是自己awk学医不精通.
所以尝试进行三步法进行处理
第一步取出时间戳的数值, 第二步进行转换, 第三步进行原生替换.
这样可能会有很大的性能损耗.
具体命令
for i in `cat zhaobsh2.log |awk '{print $1}'` ;
do y=$(date +"%Y-%m-%d %H:%M %S.%N" -d@$i) ; sed -i "s/${i}/${y}/g" zhaobsh2.log ;
done
验证一下性能
发现如果是百万级, 基本上不具备可操作性.
需要进行优化.
第二次处理
time( export IFS=$'\n' ; export j=1 ; for i in `awk '{cmd="date -d@"$1; cmd |getline; print}' zhaobsh.log.test2 ` ;
do echo -n $i && sed -n ${j}p zhaobsh.log.test2 && j=`expr $j + 1` ;
done > zhaobsh.log.test22)
time (for i in `cat zhaobsh.log.test |awk '{print $1}'` ;
do y=$(date +"%Y-%m-%d %H:%M %S.%N" -d@$i) ; sed -i "s/${i}/${y}/g" zhaobsh.log.test ;
done)
好像 五百条数据库都是 8秒钟左右
百万级的 好像都没有准确进行处理..
文本处理的确比较麻烦.
标签:易读,转换成,log,do,-%,sed,awk,zhaobsh,Linux
From: https://www.cnblogs.com/jinanxiaolaohu/p/17028850.html