awk Zeichenunterschiede bei der Verwendung von if

awk Zeichenunterschiede bei der Verwendung von if

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 ifhinzu $2

verwandte Informationen