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

如何在Bash中逐行处理文本,实现分数计算与字符串截取

Bash文本处理问题解决方法

问题出在哪

你当前的命令会把文件里所有行的第一列全堆进$number,第二列全堆进$word,变量里是一堆值拼接成的字符串,自然没法单独处理每一行的分数和单词截取。

正确处理方式:逐行循环读取

用while read循环逐行读取文件,对每一行的分数和单词单独处理:

完整脚本(包含分数计算+字符串截取)

while read -r num word; do
    # 把分数转成小数(用bc工具做浮点计算)
    decimal=$(echo "scale=2; $num" | bc)
    echo "分数 $num 转小数:$decimal"
    
    # 拆分分数的分子和分母
    numerator=$(echo "$num" | cut -d '/' -f1)
    denominator=$(echo "$num" | cut -d '/' -f2)
    # 计算要截取的字符串长度:(分子 × 单词长度) ÷ 分母
    str_len=${#word}
    cut_len=$(( numerator * str_len / denominator ))
    # 截取字符串并输出
    echo "${word:0:$cut_len}"
done < "$1"

简化版(仅输出截取后的字符串)

如果不需要分数计算,只想要目标输出,用这个:

while read -r num word; do
    numerator=$(echo "$num" | cut -d '/' -f1)
    denominator=$(echo "$num" | cut -d '/' -f2)
    str_len=${#word}
    cut_len=$(( numerator * str_len / denominator ))
    echo "${word:0:$cut_len}"
done < "$1"

测试效果

输入文件内容:

3/4  swimming
2/5  running

执行简化版脚本后,直接输出:

swimmi
run

关键知识点

  • while read -r num word:自动按空格分割每行内容,把分数存入num、单词存入word,实现逐行处理
  • ${word:0:$cut_len}:Bash原生字符串截取语法,从开头截取指定长度的字符
  • $(( ... )):Bash的整数运算语法,用来计算截取长度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:20:39