2016-03-30 10 views
-1

Ich habe eine Datei mit Spalten wie diese (Tab getrennt)Encode Spaltenwerte aus lond zur Basis 36

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 
: 
: 

Ist es möglich, die langen Werte in „column_to_encode“ zu kodieren 36 zu stützen bash oder einige Linux verwenden Befehl?

Es macht mir nichts aus, wenn ich auch Daten aus der Datenbank ziehe. Hier ist die Abfrage, die ich verwenden:

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

Gibt es eine Möglichkeit, wo ich die column_to_encode werfen können sich 36 in der Abfrage zu stützen?

Antwort

1

Wenn es keine build-in Umwandlung ist es, Sie die handlichen Basisrechner bc für die Basis Konvertierung als auch verwenden können, das heißt

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

wahrscheinlich besser, eine Funktion

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

zu erstellen und für Umwandlung in das richtige Alphabet ein Array-Lookup

$ 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 

jetzt, was übrig bleibt durch die Ziffern wird Looping

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

Für Leser steht bc nicht für die Basiskonvertierung, es ist Basisrechner. od ist das direktere Tool, das für Basiskonvertierungen gedacht ist. – atxdba

+0

richtig, lass mich klarstellen. – karakfa