awk에 16진수 문자 파이핑

awk에 16진수 문자 파이핑

명령이 예상대로 작동합니다.

$ awk 'BEGIN {print "\x41"}'
A

그냥 이렇게

$ printf '\x41' | awk '{print}'
A

그러나 awk를 사용하여 16진수 문자를 인식하면 실패합니다.

$ echo '\x41' | awk '{print}'
\x41

이 문제를 극복하는 방법은 무엇입니까?

답변1

다음과 같은 작업을 수행해야 합니다.

printf '%s\n' '\x41' | 
  awk 'BEGIN{for (i=0;i<0x100;i++) x[sprintf("%02x",i)]=sprintf("%c",i)}
       {print x[tolower(substr($0,3))]}'

awk16진수 문자열을 문자는 물론 숫자로 직접 변환할 수 있는 방법도 없습니다.

이런 종류의 일은 에서 하기가 훨씬 쉽습니다 perl. 바라보다여기awk구현 urldecode.

~처럼@terdon 힌트, GNU 구현에는 입력된 16진수 및 8진수를 인식 할 수 있는 옵션이 awk있습니다 . 따라서 다음과 같이 할 수도 있습니다.-n|--non-decimal-dataawk

printf '%s\n' '\x41' | gawk -n '{printf "%c\n", +("0x" substr($0,3))}'

gawk다음과 같은 기능도 있습니다 strtonum().

printf '%s\n' '\x41' | gawk -n '{printf "%c\n", strtonum("0x" substr($0,3))}'

관련 정보