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

使用Awk根据指定列值新增列并添加列名的语法问题

用Awk根据第4列内容新增列并添加列名(解决重复输出问题)

需求说明

给CSV文件末尾新增一列,规则如下:

  • 首行追加列名test
  • 数据行根据第4列内容生成新增列:
    • 若第4列首字符为P,取该列从第5位开始的4个字符
    • 否则取该列前4个字符

原文件内容(file1)

$ cat file1
f1,f2,f3,f4,f5
row1_1,row1_2,row1_3,SBCDE,row1_5
row2_1,row2_2,row2_3,AWERF,row2_5
row3_1,row3_2,row3_3,ASDFG,row3_5
row4_1,row4_2,row4_3,PRE-ASDQG,row4_5

问题解决

最初编写的Awk命令出现重复输出问题,调试后得到以下正确命令:

正确Awk命令

awk -F, -v OFS=, 'NR==1{ print $0, "test"}
NR>1 {
if (substr($4,1,1)=="P")
print $0 (NR>1 ? FS substr($4,5,4) : "")
else
print $0 (NR>1 ? FS substr($4,1,4) : "")
}
' file1

命令关键说明

  • -F, -v OFS=,:统一设置输入、输出的字段分隔符为逗号,保证CSV格式一致
  • NR==1{ print $0, "test"}:单独处理首行,直接在末尾追加列名
  • NR>1块处理数据行:
    • 通过substr($4,1,1)判断第4列首字符
    • 按规则截取目标字符,用字段分隔符连接到原行末尾输出

最终输出结果

f1,f2,f3,f4,f5,test
row1_1,row1_2,row1_3,SBCDE,row1_5,SBCD
row2_1,row2_2,row2_3,AWERF,row2_5,AWER
row3_1,row3_2,row3_3,ASDFG,row3_5,ASDF
row4_1,row4_2,row4_3,PRE-ASDQG,row4_5,ASDQ

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:25:21