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

如何使用sed或awk在TXT文件第4个位置添加列?

在文本文件指定位置插入新列的Linux命令解决方案

原文件内容

name    space   valid   date1        date2 
   abc     mon     yes    2022-10-10   2022-10-10
   def     tue     yes    2022-10-10   2022-10-10
   ghi     wed     yes    2022-10-10   2022-10-10
   jkl     thu     yes    2022-10-10   2022-10-10

需求

在第4个位置插入一列,表头为location,所有数据行该列内容统一为newyork,最终效果如下:

name    space   valid   location     date1        date2 
   abc     mon     yes    newyork    2022-10-10   2022-10-10
   def     tue     yes    newyork    2022-10-10   2022-10-10
   ghi     wed     yes    newyork    2022-10-10   2022-10-10
   jkl     thu     yes    newyork    2022-10-10   2022-10-10

你的命令问题分析

你之前的awk命令错误地将逗号设为分隔符,但原文件是空格分隔;同时修改$3的逻辑也不符合插入列的需求,导致无法正确实现效果。


解决方案

方法1:使用awk实现

基础版(快速实现,不严格对齐)

awk默认会将连续空格视为分隔符,直接在第3个字段后插入新内容即可:

awk 'NR==1 {print $1, $2, $3, "location", $4, $5} NR>1 {print $1, $2, $3, "newyork", $4, $5}' values.txt

对齐版(匹配原文件格式)

用printf控制列宽,保证输出和原文件格式一致:

awk 'NR==1 {printf "%-8s %-6s %-6s %-10s %-12s %-12s\n", $1, $2, $3, "location", $4, $5} NR>1 {printf "%-8s %-6s %-6s %-10s %-12s %-12s\n", $1, $2, $3, "newyork", $4, $5}' values.txt
  • %-8s 表示左对齐并占用8个字符宽度,可根据原文件列宽调整数值,确保格式统一。

方法2:使用sed实现

针对表头和数据行分别做替换,匹配原文件空白格式:

sed -e '1s/\(valid\s*\)/\1location     /' -e '2,$s/\(yes\s*\)/\1newyork    /' values.txt
  • 1s/.../.../ 处理第一行,在valid后的空白处插入location和对应空格
  • 2,$s/.../.../ 处理第2行到末尾,在yes后的空白处插入newyork和对应空格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:06:24