You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:32:28