2010-03-23 11 views

Antwort

9

finden Sie in das awk Handbuch für ordinal functions Sie verwenden können. Aber da du awk verwendest, solltest du auf einer Version der Shell sein, zB bash. Warum also nicht die Shell benutzen?

$ printf "%d" "'a" 
97 
+0

wird es Teil eines vorhandenen awk-Codes sein. –

3

Es scheint dies kein triviales Problem. Ich fand diesen Ansatz einen Lookup-Array, das für A-Z zumindest funktionieren soll:

BEGIN { convert="ABCDEFGHIJKLMNOPQRSTUVWXYZ" } 
     { num=index(convert,substr($0,2,1))+64; print num } 
+0

für diese Lösung zu arbeiten, ich muss Lookup-Array für alle Zeichen in der ASCII-Tabelle in der Reihenfolge erstellen. –

+0

Ja, das ist richtig. Es sind nur 127 Werte, also ist es nicht so ein großer Deal. –

22

nur grundlegende awk verwenden (auch nicht gaffen, so dass die unten auf allen BSD arbeiten sollte und Linux-Varianten):

$ echo a | awk 'BEGIN{for(n=0;n<256;n++)ord[sprintf("%c",n)]=n}{print ord[$1]}' 
97 

Hier ist die entgegengesetzte Richtung (auf Vollständigkeit):

$ echo 97 | awk 'BEGIN{for(n=0;n<256;n++)chr[n]=sprintf("%c",n)}{print chr[$1]}' 
a 

Grundvoraussetzung ist die Verwendung einer Nachschlagetabelle.

+0

Gute Eins! Beachten Sie, dass Sie direkt 'echo 97 | awk '{printf ("% c", $ 1)}' und bekomme 'a'. – fedorqui

Verwandte Themen