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

如何在Shell脚本中用AWK批量插入匹配的NAME值到对应行?

解决文本块中插入NAME值的Shell脚本方案

问题描述

我有一个结构固定的文本文件,内容按NAME块重复排列,每个块包含NAME、TYPE、TEST和END行,冒号后的内容各不相同。希望生成新文件,将每个块的NAME值插入到该块内TYPE和TEST行的开头。

原文件示例

NAME : Name1
TYPE : Something2
TEST : Something3
END
NAME : Name2
TYPE : Something5
TEST : Something6
END

期望输出示例

NAME : Name1
Name1 TYPE : Something2
Name1 TEST : Something3
END
NAME : Name2
Name2 TYPE : Something5
Name2 TEST : Something6
END

已尝试的命令

awk '/NAME/ {print;while($0!~ /END/){getline;print;}}' InputFile > OutputFile

解决方案

用awk就能实现需求,核心逻辑是先把每个块的NAME值存起来,后续遇到TYPE/TEST行时把这个值加在开头:

awk '/NAME :/ {name=$3; print; next} /TYPE :|TEST :/ {print name " " $0; next} 1' InputFile > OutputFile

代码说明

  • 碰到NAME :开头的行时,提取冒号后的名称(第3个字段)存到变量name,打印当前行后直接处理下一行
  • 碰到TYPE :或TEST :开头的行时,把之前存的name加空格拼在当前行前面再打印
  • 最后的1是awk的简写规则,对所有没被上面规则匹配到的行(比如END行)直接原样输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:45:08