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

如何用awk删除CSV文件最后2列而非仅清空列内容?

用awk删除CSV文件最后2列的正确方法

你当前执行的命令仅清空了第10、11列内容,并未真正移除这两个字段,导致输出保留了多余逗号:

x=$(awk -v FPAT='([^,]*)|("[^"]+")' -v OFS=',' '{$10=$11=""; print $0}' ${filename} > nse.csv)

示例场景

原CSV内容:

a,b,c,d,e,f,g,h,i,j,k
1,2,3,4,5,6,7,8,9,10,11

执行上述命令后的错误输出:

a,b,c,d,e,f,g,h,i,,
1,2,3,4,5,6,7,8,9,,

期望得到的正确输出:

a,b,c,d,e,f,g,h,i
1,2,3,4,5,6,7,8,9

正确解决方案

由于你的CSV包含带引号的字段(已通过FPAT正确识别字段边界),需调整awk逻辑来移除最后两个字段,而非仅清空内容:

方法1:修改字段数NF(最简洁)

直接将字段数NF设置为NF-2,awk会自动丢弃后续字段,输出时不会产生多余逗号:

awk -v FPAT='([^,]*)|("[^"]+")' -v OFS=',' '{NF-=2; print $0}' ${filename} > nse.csv

方法2:手动拼接前NF-2个字段(兼容更多awk版本)

若担心部分awk版本对NF修改的兼容性,可手动遍历并拼接前NF-2个字段:

awk -v FPAT='([^,]*)|("[^"]+")' -v OFS=',' '{
    out = $1
    for (i=2; i<=NF-2; i++) {
        out = out OFS $i
    }
    print out
}' ${filename} > nse.csv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:33:12