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

如何用awk/sed批量替换CSV中AS_开头列的超标值为nan

批量处理CSV中所有AS_开头列的异常值替换

需求:CSV数据集中所有以AS_开头的列(如AS_2f、AS_5f),将其中数值大于20的内容替换为nan,实现批量处理而非单独列处理。

数据示例

cat << EOF > data.csv
sl no,AS_2f,AD_2f,SR_2f,SV_2f,AS_5f,AD_5f,SR_5f,SV_5f
1.0,3.0,5.0,35.0,9.0,11.0,13.0,15.0,17.0
2.0,3.0,4.0,5.0,6.0,107.0,8.0,204.0,10.0
3.0,3.4,34.0,4.2,4.6,5.0,5.4,5.8,6.2
4.0,3.0,2.0,1.0,0.0,-1.0,-2.0,204.0,-4.0
5.0,24.5,44.0,63.5,83.0,102.5,122.0,141.5,161.0
6.0,32.0,58.0,84.0,110.0,136.0,162.0,188.0,214.0
EOF

现有脚本(仅处理单列)

awk -F',' 'NR==1 {print} NR>1 {for(i=2; i<=NF; i++) if ($i > 20 && i==2) $i="nan"; print}' data.csv

期望输出

sl no,AS_2f,AD_2f,SR_2f,SV_2f,AS_5f,AD_5f,SR_5f,SV_5f
1.0,3.0,5.0,35.0,9.0,11.0,13.0,15.0,17.0
2.0,3.0,4.0,5.0,6.0,nan,8.0,204.0,10.0
3.0,3.4,34.0,4.2,4.6,5.0,5.4,5.8,6.2
4.0,3.0,2.0,1.0,0.0,-1.0,-2.0,204.0,-4.0
5.0,nan,44.0,63.5,83.0,nan,122.0,141.5,161.0
6.0,nan,58.0,84.0,110.0,nan,162.0,188.0,214.0

解决方案

使用以下awk脚本可批量处理所有AS_开头的列:

awk -F',' '
NR==1 {
    # 遍历表头,记录所有AS_开头的列索引
    for(i=1; i<=NF; i++) {
        if ($i ~ /^AS_/) {
            as_cols[i] = 1
        }
    }
    print
    next
}
{
    # 遍历所有AS_列,替换大于20的值为nan
    for(i in as_cols) {
        if ($i > 20) {
            $i = "nan"
        }
    }
    # 保持CSV分隔符输出
    OFS=","
    print
}' data.csv

脚本说明

  1. 表头处理(NR==1):遍历第一行的所有列,将列名以AS_开头的列索引存入数组as_cols,随后打印表头并跳过后续处理。
  2. 数据行处理:遍历as_cols数组中的所有列索引,检查对应字段的值是否大于20,若是则替换为nan。
  3. 输出格式:设置输出分隔符为逗号(OFS=","),确保输出符合CSV格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:02:43