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

如何实现将File1中匹配File2第一列的内容替换为第二列值?

问题描述

现有两个文件:

File 1

Create -l Ap -ne BP_v BP_v -cir {1 2 3 4}
Create -l Ap -ne BP_p BP_p -cir {1 2 3 4}

File 2

BP_v net1
BP_p net2

需求是在File1中查找与File2第一列匹配的内容,找到后替换为File2对应行的第二列内容,期望输出:

Create -l Ap -ne net1 net1 -cir {1 2 3 4}
Create -l Ap -ne net2 net2 -cir {1 2 3 4}

尝试过以下awk代码,但它是按行号匹配替换,无法实现需求:

awk 'NR==FNR{a[NR]=$1;b[NR]=$2;next}{$5=b[FNR];$6=b[FNR]}1' File 2 File 1
解决方案

用键值对映射的方式处理即可,正确的awk命令如下:

awk 'NR==FNR {map[$1]=$2; next} {for(i=1; i<=NF; i++) if($i in map) $i=map[$i]} 1' File2 File1

逻辑说明:

  • NR==FNR:仅处理第一个输入文件(File2),将第一列作为键、第二列作为值存入关联数组map。
  • next:跳过当前行的后续处理,直接读取下一行。
  • 处理File1时,遍历每行的每个字段,若字段存在于map的键集合中,就将该字段替换为对应的map值。
  • 1:awk的简写语法,等价于print $0,用于输出修改后的整行内容。

这种方式不受行顺序、匹配字段位置的限制,能精准替换所有符合条件的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:51:28