2010-03-23 27 views

Trả lời

9

xem hướng dẫn awk cho ordinal functions bạn có thể sử dụng. Nhưng kể từ khi bạn đang sử dụng awk, bạn nên trên một số phiên bản của vỏ, ví dụ như bash. vậy tại sao không sử dụng vỏ?

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

nó sẽ là một phần của một số mã awk hiện có. –

3

Có vẻ như đây không phải là một vấn đề tầm thường. Tôi đã tìm thấy phương pháp này bằng cách sử dụng mảng tra cứu, cách này sẽ hoạt động với A-Z ít nhất:

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

để giải pháp này hoạt động, tôi cần phải tạo mảng tra cứu cho tất cả các ký tự trong bảng ASCII theo thứ tự. –

+0

Vâng, đó là chính xác. Mặc dù chỉ có 127 giá trị, nên nó không phải là một vấn đề lớn. –

22

Chỉ sử dụng awk cơ bản (thậm chí không trố mắt, vì vậy dưới đây sẽ làm việc trên tất cả các BSD và Linux biến thể):

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

Dưới đây là hướng ngược lại (cho đầy đủ):

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

Tiền đề cơ bản là sử dụng bảng tra cứu.

+0

Tốt nhất! Lưu ý bạn có thể trực tiếp nói 'echo 97 | awk '{printf ("% c", $ 1)}' 'và nhận' a'. – fedorqui

Các vấn đề liên quan