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

如何使用awk从另一文件的列更新目标文件的列

问题解决:用第二个文件更新第一个文件的对应内容

文件内容

第一个文件(file1)

1 AA
2 BB
3 CC
4 DD

第二个文件(file2)

15 AA
17 BB
20 CC
25 FF

期望输出

15 AA
17 BB
20 CC
4 DD

原脚本失效原因

你用的原脚本逻辑完全搞反了:

awk 'NR==FNR{a[$1]=$2;next}a[$1]{print $2,a[$1]}' file1 file2
  • 它先读file1,把数字作为键存储字母,但我们需要的是以字母为匹配依据,用file2里的新数字替换file1对应字母的旧数字
  • 输出逻辑也错误,只会输出匹配到的行,还把字段顺序搞混了

正确的Awk脚本

直接运行这个脚本就能得到期望结果:

awk 'NR==FNR{a[$2]=$1; next} {print ($2 in a ? a[$2] : $1), $2}' file2 file1

简单解释

  1. 先读取file2,把每行的字母(比如AA)作为键,对应的新数字(比如15)存入数组a
  2. 再读取file1,对每一行做判断:
    • 如果当前行的字母在数组a中存在,就输出对应的新数字+原字母
    • 如果不存在,直接输出原行的数字+字母

如果要把结果直接覆盖回file1,建议先备份原文件,再用重定向:

awk 'NR==FNR{a[$2]=$1; next} {print ($2 in a ? a[$2] : $1), $2}' file2 file1 > temp && mv temp file1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:35:13