if를 사용할 때 awk 문자 차이

if를 사용할 때 awk 문자 차이

이 줄(사용자 데이터/열이 제거됨)과 수천 개 이상의 입력 파일이 있습니다. 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에서

편집: 'good'/'bad' awk 명령 모두에 대해 더 많은 단위 테스트를 수행한 후에 항상 'bad' 출력을 복제할 수는 없습니다. 총 행 개수가 클수록 16진수 값을 변환할 가능성은 낮아지지만 항상 100%는 아닙니다. 나는 버퍼에서 출력으로 직접 쓰는 것과 다른 일을 위해 버퍼가 필요할 때 내부 임시 파일에 쓰는 것과 관련이 있다는 가정하에 awk에 대한 버퍼의 크기를 제어하려고 노력하고 있습니다.

답변1

주변에 뭔가를 시도해 보세요

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

물론 필요에 맞게 printf 표현식을 수정 if하고 $2...

관련 정보