Wie konvertiere ich ein ASCII-Zeichen in einem AWK-Skript in ASCII HEX?
Ich möchte eine Schleife durch einen Buchstabenbereich
Beispiel
for(i="a"; i<"g"; i++)
print i;
HINWEIS: Ich möchte eine Schleife durch einen Bereich aus der Hex-Darstellung erstellen und das Zeichen drucken.
Antwort1
Klingt für mich, als ob Sie nicht wirklich brauchenalledie Charaktere...
$ awk 'BEGIN { chartable="abcdefghij" ; for (i=index(chartable, "a"); i<index(chartable, "g"); i++) { print substr(chartable, i, 1) } }'
a
b
c
d
e
f
Antwort2
Erstellen Sie eine Tabelle mit allen ASCII-Zeichen und verwenden Sie das integrierte awk, index()
um Zeichen in der Tabelle nachzuschlagen. Verwenden Sie dann, sprintf()
um den zurückgegebenen Dezimalwert index()
in Hex umzuwandeln.
BEGIN {
for (i = 0; i < 128; i++) {
table = sprintf("%s%c", table, i);
}
}
function chartohex (char) {
return sprintf("0x%x", index(table, char));
}
END { # examples
print chartohex("a");
print chartohex("A");
print chartohex("!");
}
Fügen Sie diesen Code in die Datei „foo“ ein und führen Sie ihn aus. awk -f foo < /dev/null
Dann sehen Sie die ASCII-Werte für „a“, „A“ und „!“ in hexadezimaler Schreibweise ausgegeben.
Antwort3
awk hat nicht die Funktionen ord() und chr() wie Python. Sie müssen zuerst ein Array im BEGIN-Block erstellen, dessen Index ein ASCII-Zeichen und dessen Wert eine Dezimalzahl ist.
awk 'BEGIN {
for (i = 0; i <= 255; i++) {
t = sprintf("%c", i)
a[t] = i
}
for( i=a["a"]; i < a["g"]; i++)
print sprintf("%c",i)
}'
a
b
c
d
e
f