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表示作为十进制数。

    希望写出来对大家有用

  • 相关阅读:
    查看端口有没有被占用
    微信公众号2()
    How to insert a segment of noise to music file
    puppet practice
    Docker Commands
    LempelZiv algorithm realization
    The algorithm of entropy realization
    Java network programmingguessing game
    Deploy Openstack with RDO and Change VNC console to Spice
    puppet overview
  • 原文地址:https://www.cnblogs.com/westfly/p/3531824.html
Copyright © 2011-2022 走看看