我有一个包含这些列的文件(标签分隔)
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?
答案 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