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

如何通过Bash脚本为文本文件第四列非零行添加指定常量

解决方案

这里给你修改好的example.sh脚本,完全满足你的需求——通过命令行参数传入常量,自动过滤第四列值为0(包括-0)的行,计算并输出第四列与常量相加后的结果:

#!/bin/bash

# 检查是否正确传入了常量参数
if [ $# -ne 1 ]; then
    echo "用法: $0 <待添加的常量>"
    exit 1
fi

CONSTANT="$1"
FILE="/dir/text"

while IFS=' ' read -r col1 col2 col3 col4 rest
do
    # 过滤第四列值为0的行(-0会被视为0)
    if [ "$col4" -ne 0 ]; then
        # 执行加法运算并输出结果
        echo $(( col4 + CONSTANT ))
    fi
done < "$FILE"

关键细节解释:

  1. 参数校验:开头的if [ $# -ne 1 ]用来检查是否传入了且仅传入一个常量参数,如果没传或者传多了,会提示正确用法并退出,避免脚本出错。
  2. 字段拆分:IFS=' '指定用空格作为字段分隔符,read -r col1 col2 col3 col4 rest把每行的前四个字段分别赋值给变量,rest用来兼容可能存在的多余字段(让脚本更健壮)。
  3. 过滤逻辑:用[ "$col4" -ne 0 ]做数值比较,会自动把-0识别为0,刚好符合你忽略值为0的行的需求。
  4. 算术运算:$(( col4 + CONSTANT ))是bash的整数算术运算语法,直接计算第四列值与常量的和并输出。

调用示例:

假设你要添加的常量是20,直接执行:

./example.sh 20

就会得到你期望的输出:

-160
-160
-130
-80
-110

如果你的第四列可能出现浮点数(比如-180.5),可以把算术运算部分改成用bc处理,比如:

echo "$col4 + $CONSTANT" | bc

不过看你的示例数据都是整数,所以当前脚本完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:12:52