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

Linux下如何用awk/sed将0.0/1.0/2.0这类浮点数转为整数?

解决方案

方法1:使用sed命令

sed适合简单的字符串替换场景,这里只需把0.0、1.0、2.0分别替换为对应整数,注意正则中的.需要转义(.在正则里默认匹配任意字符):

sed -e 's/0\.0/0/g' -e 's/1\.0/1/g' -e 's/2\.0/2/g' dosage.txt > new_dosage.txt
  • -e 用来指定多组替换规则
  • g 表示全局替换一行内的所有匹配项,而非仅替换第一个
  • 处理结果会写入new_dosage.txt,若想直接修改原文件,可添加-i参数(注意:不同系统的sed -i语法有差异,比如BSD sed需要写成-i '')

方法2:使用awk命令

awk更适合结构化文本处理,可遍历每个字段,精准替换目标数值:

awk '{
    for (i = 1; i <= NF; i++) {
        # 仅匹配0.0、1.0、2.0这三个特定值
        if ($i ~ /^[012]\.0$/) {
            $i = int($i)  # 将浮点数值转为整数
        }
    }
    print $0  # 输出处理后的整行内容
}' dosage.txt > new_dosage.txt

这个方法灵活性更高,如果后续需要处理更多x.0格式的数值,只需调整正则规则(比如把[012]改成[0-9],就能处理所有整数位结尾的.0数值)。

你之前的命令无效原因

你执行的cat dosage.txt | "%d\n" "$2" 2>/dev/null存在两处核心问题:

  1. 没有调用任何文本处理工具(比如printf或awk),直接写"%d\n"是无效的shell命令
  2. $2是shell环境变量,并非文本中的字段,逻辑完全不匹配需求

内容的提问来源于stack exchange,提问作者Rhea Bedi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:42:31