博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shell字符串使用十进制转换
阅读量:5074 次
发布时间:2019-06-12

本文共 802 字,大约阅读时间需要 2 分钟。

其实不知道该起什么题目。

先说下需求,线上的log是按照五分钟为粒度切分的,即每五分钟产生一个文件,19:04的log写入到

1900结尾的log文件中,19:05写入到1905结尾的log文件中。

在实时分析log的时候,往往需要我们将log的后缀拼接出来,如下是我实现的函数

function GenLogSuffixFromUnixTime() {  local unix_time=$1  local minute=`date -d @$unix_time +%M`  minute=$(((10 + minute)%10))  if [[ $minute -ge 5 ]]; then    minute=$((minute - 5))  fi  unix_time=$(($unix_time - $minute*60))  local time_str=`date -d @$unix_time +%Y%m%d.%H%M`  echo $time_str}

想法很简单

1. 传入一个unixtime,可以为当前的时间,也可以是当前时间的偏移,如一天、五分钟等。

2. 将unixtime转换为minute,将minute转换到0或5的文件上。

3. 新的unixtime时间转换为时间字符串。

在minute=08 09时,会出错,让人不明所以。

后来在同事的提醒下(之前也遇到过类似的情形),是由于Shell解析的时候将01~07当成八进制的数了,

当出现08 09在八进制下不合法的表示时,自然出错了。

知道原因了,解决方案是将高亮的代码语句替换为如下

minute=$(((10 + 10#$minute)%10))

minute前面的10表示作为十进制数。

希望写出来对大家有用

转载于:https://www.cnblogs.com/westfly/p/3531824.html

你可能感兴趣的文章
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
一步步学习微软InfoPath2010和SP2010--第七章节--从SP列表和业务数据连接接收数据(4)--外部项目选取器和业务数据连接...
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>
基于grunt构建的前端集成开发环境
查看>>
利用循环播放dataurl的视频来防止锁屏:NoSleep.js
查看>>
python3 生成器与迭代器
查看>>
java编写提升性能的代码
查看>>
Abstract Factory Pattern
查看>>
list 容器 排序函数.xml
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
windows下编译FreeSwitch
查看>>