У меня есть входной файл с этой строкой (пользовательские данные/столбцы удалены) и еще несколькими тысячами. 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
...