【问题标题】:Encode column values from lond to base 36将列值从伦敦编码为基数 36
【发布时间】:2016-07-18 20:38:50
【问题描述】:

我有一个包含这些列的文件(制表符分隔)

hit_stamp       x_id     column_to_encode       type  count
2016-02-19 11:00:39     3479    1727468938147435143     display 1
2016-02-19 11:00:43     3479    8993948836180821483     display 1
2016-02-19 11:00:45     3479    5429425032128142743     display 1
2016-02-19 11:00:46     3479    1221384347847832843     display 1
2016-02-19 11:00:46     3479    2242413443751657343     display 1
2016-02-19 11:00:46     3479    4803565579589481863     display 1
:
:

是否可以使用 bash 或一些 linux 命令将“column_to_encode”中的长值编码为 base 36?

当我从数据库中提取数据时,我也不介意这样做。 这是我使用的查询:

select hit_stamp, x_id, column_to_encode, type,  count(1) count from xyzTable group by hit_stamp, x_id, column_to_encode, type;

有没有办法可以在查询本身中将 column_to_encode 转换为 base 36?

【问题讨论】:

    标签: mysql linux bash encode


    【解决方案1】:

    mysql conv function 用于转换基数。

    【讨论】:

      【解决方案2】:

      如果没有内置转换,您也可以使用方便的基本计算器bc 进行基本转换,即

      $ bc <<< "obase=36; 370"
      10 10
      

      创建一个函数可能更好

      $ b36() { echo $(bc <<< "obase=36; $1"); }
      

      并且为了将数组查找转换为正确的字母表

      $ BASE36=($(echo {0..9} {A..Z}))
      $ echo ${BASE36[@]}
      0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
      

      现在,剩下的就是循环数字

      $ for i in $(b36 1727468938147435143); do echo -n ${BASE36[$i]}; done; echo
      D4HCMQKMQEMF
      

      【讨论】:

      • 对于读者来说,bc 不代表基本转换,它是基本的计算器。 od 是用于基础转化的更直接的工具
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 2013-10-08
      相关资源
      最近更新 更多