awk if 使用時の文字の違い

awk if 使用時の文字の違い

この行 (ユーザー データ/列が削除されている) とさらに数千の行を含む入力ファイルがあります。xCE は、クライアント ファイルからの変換されていない 16 進値です。

412640  xCE

この awk コマンドを実行すると、次のようになります。

awk -F'\t' '{if ($1 == "412640" ) print $1 "\t" $2}' TEST.txt > test1.txt

test1.txt の出力では xCE が Î に変換されており、これが私が望んでいる動作です。

if なしでファイル全体を実行すると、次のコマンドになります。

awk -F'\t' '{print $1 "\t" $2}' TEST.txt > test2.txt

test2.txt の出力にはまだ xCE が含まれているので、次のように試しました。

awk -F'\t' '{if ($1 == $1 )print $1 "\t" $2}' TEST.txt > test2.txt

test2 の出力にはまだ xCE が含まれています。

常に変換された出力を取得する方法についてアドバイスはありますか?

使用しているのは:: GNU Awk 3.1.7 コードページは UTF-8 です。Redhat 6.7 で

編集: 「良い」/「悪い」awk コマンドの両方の単体テストをさらにたくさん行った後、必ずしも「悪い」出力を再現できるとは限りません。行数の合計が大きいほど、16 進数値を変換する可能性は低くなりますが、100% ではありません。現在、awk のバッファ サイズを制御する方法を検討しています。バッファから出力に直接書き込むことと、他の目的でバッファが必要な場合に内部の一時ファイルに書き込むこととが関係していると考えています。

答え1

何か試してみる

 awk '{ printf("%c \n" ,strtonum("0x" substr($2,2)))}' TEST.txt 

もちろん、必要に応じて printf 式を変更し、...ifを追加します。$2

関連情報