Различия в символах awk при использовании if

Различия в символах awk при использовании if

У меня есть входной файл с этой строкой (пользовательские данные/столбцы удалены) и еще несколькими тысячами. XCE — это неконвертированное шестнадцатеричное значение из файла клиентов.

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

EDIT: После кучи дополнительных модульных тестов как «хороших», так и «плохих» команд awk я не всегда могу воспроизвести «плохой» вывод. Чем больше общее количество строк, тем меньше вероятность преобразования шестнадцатеричных значений, но это не 100% случаев. Я сейчас пытаюсь контролировать размер буфера для awk, предполагая, что это связано с прямой записью из буфера в вывод, а не с записью во внутренние временные файлы, когда буфер нужен для других целей.

решение1

Попробуйте что-нибудь около

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

Конечно, измените выражение printf в соответствии со своими потребностями, ifдобавив $2...

Связанный контент