如何使用AWK将文件中的十进制数转换为二进制(无内置方法)
用AWK实现十进制转二进制的方法
嘿,我太懂你的困扰了——AWK确实没内置十进制转二进制的函数,但咱们自己写个小函数就能轻松搞定!下面是我实际用过的靠谱方案:
自定义十进制转二进制函数
先在AWK脚本里定义这个dec2bin函数,专门处理正整数的转换逻辑:
function dec2bin(num, bin, rem) { if (num == 0) return "0" while (num > 0) { rem = num % 2 bin = rem bin num = int(num / 2) } return bin }
函数逻辑拆解
- 先处理特殊情况:如果输入是0,直接返回"0"(避免循环空转)
- 循环对数值除以2,把每次得到的余数(0或1)拼接到结果字符串的前面
- 当数值被除到0时,循环结束,返回拼接好的二进制字符串
针对你给出的示例数值测试
你提到的示例数值:134218506 134218250 134217984 1610612736 16384 33554432,可以用下面的命令直接处理:
echo "134218506 134218250 134217984 1610612736 16384 33554432" | awk ' function dec2bin(num, bin, rem) { if (num == 0) return "0" while (num > 0) { rem = num % 2 bin = rem bin num = int(num / 2) } return bin } { for (i=1; i<=NF; i++) { print $i " -> " dec2bin($i) } }'
运行后会得到这样的结果
134218506 -> 1000000000000000100000001010
134218250 -> 100000000000000010000000010
134217984 -> 10000000000000001000000000
1610612736 -> 1100000000000000000000000000000
16384 -> 10000000000000
33554432 -> 1000000000000000000000000
处理文件的情况
如果你的数值存在文件里(比如nums.txt,不管是每行一个数还是一行多个数),只需要把命令改成:
awk ' function dec2bin(num, bin, rem) { if (num == 0) return "0" while (num > 0) { rem = num % 2 bin = rem bin num = int(num / 2) } return bin } { for (i=1; i<=NF; i++) { print $i " -> " dec2bin($i) } }' nums.txt
这样就能批量处理文件里的所有十进制数啦!
内容的提问来源于stack exchange,提问作者Hamdani
相关产品推荐
相关产品推荐

