编码从lond到base 36的列值

时间:2016-03-30 17:24:43

标签: mysql linux bash encode

我有一个包含这些列的文件(标签分隔)

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”中的long值编码为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?

2 个答案:

答案 0 :(得分:2)

mysql conv function用于转换碱基。

答案 1 :(得分:1)

如果没有内置转换,您也可以使用方便的基本计算器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