zoukankan      html  css  js  c++  java
  • Shell字符串使用十进制转换

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

    先说下需求,线上的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表示作为十进制数。

    希望写出来对大家有用

  • 相关阅读:
    WoSign全球可信网站安全认证签章安装指南
    软件测试学习(4)
    软件测试学习(3) 第一次上机实验
    软件测试学习(2)
    C#实验——Problem Statement
    C#实验——Supplementary Specifications
    python— if __name__=='__main__':的作用
    python--网络请求
    python--程序分目录、加环境变量
    python--接口开发
  • 原文地址:https://www.cnblogs.com/westfly/p/3531824.html
Copyright © 2011-2022 走看看