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

如何用awk或sed将文件中连续匹配项替换为另一文件对应内容?

用awk实现按顺序替换匹配内容

核心思路

先将File2.txt中的所有数字读取到数组中,再遍历File1.txt,每遇到匹配XXX family的行,就依次取出数组中的对应元素完成替换,其余行保持原样输出。

实现命令

创建名为replace.awk的脚本文件,内容如下:

NR==FNR { nums[++n] = $0; next }
$2 == "family" && $1 == "XXX" { $1 = nums[++cnt]; print; next }
1

执行命令生成目标文件:

awk -f replace.awk File2.txt File1.txt > New_file.txt

命令解释

  • NR==FNR { nums[++n] = $0; next }:处理第一个输入文件(File2.txt)时,将每一行内容存入数组nums,NR为全局行号,FNR为当前文件行号,两者相等时判定为正在处理第一个文件。
  • $2 == "family" && $1 == "XXX" { $1 = nums[++cnt]; print; next }:处理第二个输入文件(File1.txt)时,匹配第一列为XXX、第二列为family的行,将第一列替换为nums数组的下一个元素,打印该行后跳过后续逻辑。
  • 1:默认打印所有未被特殊处理的行,保证原文件其他内容不变。

最终结果

生成的New_file.txt内容如下:

123 zone 
123 patch 
123 family 
456 zone 
456 patch 
456 family 
789 zone 
789 patch 
789 family

补充:sed的实现方式(需配合辅助工具)

sed本身不支持直接跨文件按顺序读取替换内容,需借助shell循环实现,示例如下:

paste <(grep -n "XXX family" File1.txt | cut -d: -f1) File2.txt | while read line num; do
    sed -i "${line}s/XXX/${num}/" File1.txt
done

注意:该方式会直接修改原File1.txt,大文件场景下效率低于awk,建议操作前备份原文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:20:25