你是对的,gawk 中没有对二进制转换的内部支持。令人难以置信的是,在printf()
. 所以你被功能困住了。
请记住,awk 是弱类型的。这就是为什么函数有一些疯狂的行为,比如识别字符串开头的“0x”意味着它是一个十六进制数。在这样的语言中,最好控制自己的类型。
这是我多年来一直坐在那里的几个功能......
#!/usr/local/bin/gawk -f
function bin2dec(n) {
result = 0;
if (n~/[^01]/) {
return n;
}
for (i=length(n); i; i--) {
result += 2^(length(n)-i) * substr(n,i,1);
}
return result;
}
function dec2bin(n) {
result = "";
while (n) {
if (n%2) {
result = "1" result;
} else {
result = "0" result;
}
n = int(n/2);
}
return result;
}
{
print dec2bin( and(bin2dec($1),bin2dec($2)) );
}
结果:
$ echo "1101 1011" | ./doit.awk
1001
$ echo "11110 10011" | ./doit.awk
10010
$