2010-03-23 25 views

Respuesta

9

ver el manual de awk para ordinal functions que puede utilizar. Pero ya que estás usando awk, deberías tener una versión de shell, por ejemplo, bash. ¿por qué no usar el caparazón?

$ printf "%d" "'a" 
97 
+0

será parte de algún código awk existente. –

3

parece que esto no es un problema trivial. He encontrado este enfoque utilizando una matriz de búsqueda, que debe trabajar para A-Z al menos:

BEGIN { convert="ABCDEFGHIJKLMNOPQRSTUVWXYZ" } 
     { num=index(convert,substr($0,2,1))+64; print num } 
+0

para que esta solución funcione, necesito crear una matriz de búsqueda para todos los caracteres en la tabla ASCII en el orden. –

+0

Sí, eso es correcto. Sin embargo, solo son 127 valores, así que no es un gran problema. –

22

Usando sólo awk básica (ni siquiera curiosear, por lo que el siguiente debería funcionar en todos BSD y variantes de Linux):

$ echo a | awk 'BEGIN{for(n=0;n<256;n++)ord[sprintf("%c",n)]=n}{print ord[$1]}' 
97 

Aquí está la dirección opuesta (por completo):

$ echo 97 | awk 'BEGIN{for(n=0;n<256;n++)chr[n]=sprintf("%c",n)}{print chr[$1]}' 
a 

La premisa básica es usar una tabla de búsqueda.

+0

¡Bueno! Tenga en cuenta que puede decir directamente 'echo 97 | awk '{printf ("% c", $ 1)}' 'y obtener' a'. – fedorqui

Cuestiones relacionadas