使用AWK拆分CSV列插入新列并实现单行输出与空格修剪
AWK拆分字段插入并修剪空白解决方案
修正后可直接运行的代码
#!/bin/awk # 自定义trim函数:去除字符串首尾空白 function trim(s) { gsub(/^[[:space:]]+|[[:space:]]+$/, "", s) return s } BEGIN { FS = "," OFS = "," } { # 先修剪原有所有字段的首尾空白 for(i=1; i<=NF; i++) { $i = trim($i) } # 拆分第二列内容 split($2, a, "|") split(a[2], b, "@") # 构造完整输出行:原$1、$2 + 拆分的三个字段 + 原$3及之后的所有字段 print $1, $2, trim(a[1]), trim(b[1]), trim(b[2]), substr($0, index($0, $3)) }
关键调整说明
- 解决单行输出问题:原来的代码先执行
print会自动追加换行符,导致后续字段拆成两行。调整后一次性构造完整行再输出,所有字段自动用OFS(逗号)分隔,保证是单行逗号分隔格式。 - 解决空白修剪问题:新增通用
trim函数,先统一修剪原有所有字段的首尾空白,拆分出来的子字段也经过trim处理,输出的所有列都不会有多余的首尾空格。
执行命令保持不变即可:awk -f insert.awk insert.txt > output.txt,运行后得到的output.txt和你期望的结果完全一致。
内容的提问来源于stack exchange,提问作者joshua1609
相关产品推荐
相关产品推荐

