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

为什么awk处理CSV文本时会覆盖先打印的列内容?

问题原因

你遇到的问题核心有两点:

  1. 打印字段顺序不符合预期:你当前命令中的打印顺序是$13 $14 $4 $5 $6,会先输出第13、14列,再输出第4、5、6列,和你想要的输出顺序不符。
  2. CSV解析规则不严谨、未设置输出分隔符:直接用逗号作为字段分隔符处理带双引号的CSV,若后续字段内部出现逗号会出现切分错误;同时你打印时字段之间没有加分隔符,会导致所有字段直接拼接在一起,看起来像是内容截断。

解决方案

如果你用的是GNU awk(绝大多数Linux发行版默认预装的awk版本),推荐用FPAT参数正确解析带引号的CSV格式,调整后的命令如下:

awk 'BEGIN { FPAT = "([^,]+)|(\"[^\"]+\")"; OFS=" " } { print $4, $5, $6, $13, $14 }'

参数说明:

  • FPAT 定义了CSV字段的匹配规则,可以正确识别被双引号包裹的字段,哪怕字段内部包含逗号也不会切分错误
  • OFS=" " 设置输出字段之间的分隔符为空格,你也可以根据需要换成制表符\t、逗号,等其他分隔符

如果你使用的awk版本不支持FPAT,且可以确定所有CSV字段内部都不包含逗号,也可以直接调整打印顺序和输出分隔符:

awk 'BEGIN { FS=","; OFS=" " } { print $4, $5, $6, $13, $14 }'

输出效果

用你提供的输入运行上述命令,会得到以下符合预期的输出:

"15-20m." "50-100cm" "Mature" 56.4645790890058 -2.86562748812157
"10-15m." "25-50cm" "Mature" 56.4644143392449 -2.8660619300834

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:45:04