Ich habe eine Eingabedatei mit dieser Zeile (Benutzerdaten/Spalten entfernt) und mehreren tausend weiteren. Das xCE ist ein nicht konvertierter Hex-Wert aus der Clientdatei.
412640 xCE
Wenn ich es über diesen awk-Befehl ausführe:
awk -F'\t' '{if ($1 == "412640" ) print $1 "\t" $2}' TEST.txt > test1.txt
die Ausgabe in test1.txt hat xCE in Î konvertiert, und das ist mein Wunsch.
Wenn ich die gesamte Datei ohne if ausführe, erscheint dieser Befehl:
awk -F'\t' '{print $1 "\t" $2}' TEST.txt > test2.txt
die Ausgabe in test2.txt enthält immer noch xCE, und als ich es versucht habe:
awk -F'\t' '{if ($1 == $1 )print $1 "\t" $2}' TEST.txt > test2.txt
die Ausgabe in Test2 enthält immer noch xCE.
Gibt es einen Rat, wie man immer die konvertierte Ausgabe erhält?
Ich verwende: GNU Awk 3.1.7 Meine Codepage ist UTF-8 Auf Redhat 6.7
EDIT: Nach einer Reihe weiterer Unit-Tests der „guten“/„schlechten“ awk-Befehle kann ich die „schlechte“ Ausgabe nicht immer reproduzieren. Je größer die Gesamtzeilenanzahl, desto unwahrscheinlicher ist es, dass die Hex-Werte konvertiert werden, aber das ist nicht immer der Fall. Ich versuche jetzt, die Größe des Puffers für awk zu steuern, in der Annahme, dass es damit zu tun hat, direkt vom Puffer in die Ausgabe zu schreiben, im Gegensatz zum Schreiben in interne temporäre Dateien, wenn der Puffer für andere Dinge benötigt wird.
Antwort1
Probieren Sie etwas aus
awk '{ printf("%c \n" ,strtonum("0x" substr($2,2)))}' TEST.txt
Passen Sie den printf-Ausdruck natürlich Ihren Anforderungen an und fügen Sie Folgendes if
hinzu $2
…