Ich muss den ASCII-Wert des angegebenen Zeichens nur in awk ausgeben.So drucken Sie den ASCII-Wert eines Zeichens nur mit dem einfachen awk
Im Folgenden Code gibt 0
als Ausgabe:
echo a | awk '{ printf("%d \n",$1); }'
Ich muss den ASCII-Wert des angegebenen Zeichens nur in awk ausgeben.So drucken Sie den ASCII-Wert eines Zeichens nur mit dem einfachen awk
Im Folgenden Code gibt 0
als Ausgabe:
echo a | awk '{ printf("%d \n",$1); }'
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
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 }
für diese Lösung zu arbeiten, ich muss Lookup-Array für alle Zeichen in der ASCII-Tabelle in der Reihenfolge erstellen. –
Ja, das ist richtig. Es sind nur 127 Werte, also ist es nicht so ein großer Deal. –
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.
Gute Eins! Beachten Sie, dass Sie direkt 'echo 97 | awk '{printf ("% c", $ 1)}' und bekomme 'a'. – fedorqui
wird es Teil eines vorhandenen awk-Codes sein. –