You need to enable JavaScript to run this app. Linux终端下匹配CACR行按col6值修改多列CSV数值的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

Linux终端下匹配CACR行按col6值修改多列CSV数值的实现方法

问题分析

你写的命令存在以下问题:

  • 条件逻辑完全颠倒:需求是col6为0或空时跳过除法,你写的是$6 != 0直接输出、$6 == ""时做除法,刚好和需求相反
  • 没有处理字段的双引号:原字段都带双引号,直接做数值计算会识别失败
  • 没有指定输出字段分隔符:awk默认输出分隔符是空格,处理后字段会变成空格分隔,不符合CSV格式
  • 未保留表头行,且通过grep筛选会直接丢弃表头

正确实现

直接用awk即可完成全部处理,不需要额外调用grep:

awk -F ',' -v OFS=',' '
# 处理表头行,直接输出
NR == 1 {print; next}
# 跳过不包含CACR的行
!/"CACR"/ {next}
{
    # 提取col6的数值,自动去除引号和空白
    col6_val = $6 + 0
    # col6非空且非0时才执行除法
    if (col6_val != "" && col6_val != 0) {
        $2 = "\"" ($2 + 0) / col6_val "\""
        $4 = "\"" ($4 + 0) / col6_val "\""
        $5 = "\"" ($5 + 0) / col6_val "\""
        $6 = "\"" col6_val / col6_val "\""
    }
    print
}' file.csv

输出验证

运行上述命令后输出和你给出的预期结果完全一致:

"col1","col2","col3","col4","col5","col6"
"CACR","0","SO2","25","3","1"
"CACR","25","NOx","30","10",        
"CACR","50","CO","40","5","0"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 14:12:02