1

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

РЕДАКТИРОВАТЬ: После большого количества модульного тестирования обеих «хороших» /«плохих» awk-команд, я не всегда могу повторить «плохой» вывод. Чем больше общее количество строк, тем меньше вероятность преобразования шестнадцатеричных значений, но это не 100% времени. Сейчас я пытаюсь контролировать размер буфера для awk, исходя из предположения, что это связано с прямой записью из буфера в выходной поток по сравнению с записью во внутренние временные файлы, когда ему нужен буфер для других целей.

1 ответ1

1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .