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

AWK实现两文件列匹配并输出指定列的技术需求

我来帮你搞定这个文本匹配的增强需求,用awk就能完美实现,下面是完整的脚本和详细说明:

完整实现脚本

把下面的代码保存为match_nodes.awk:

# 预处理File2,构建前5字符到loopback地址的映射表
NR == FNR {
    # 截取第1列的前5个字符作为匹配键
    key = substr($1, 1, 5)
    # 存储键对应的loopback地址(第2列)
    loopback_map[key] = $2
    # 跳过后续逻辑,处理下一行
    next
}

# 处理File1的每一行
{
    # 分别截取第1列和第3列的前5个字符
    key_col1 = substr($1, 1, 5)
    key_col3 = substr($3, 1, 5)
    
    # 从映射表中获取对应的loopback地址,没匹配到则设为空字符串(可改成"NA"标记)
    val_col1 = (key_col1 in loopback_map) ? loopback_map[key_col1] : ""
    val_col3 = (key_col3 in loopback_map) ? loopback_map[key_col3] : ""
    
    # 输出原行 + 两个匹配到的loopback地址
    print $0, val_col1, val_col3
}
使用方法

在终端中运行以下命令(替换成你的实际文件名):

awk -f match_nodes.awk "File2-Node_Loopbacks.txt" "File1-Node_Links.txt"
脚本说明
  • 预处理File2:NR == FNR是awk的经典写法,用来识别第一个输入文件(这里是File2),我们把每个行的第1列前5字符作为键,对应的第2列loopback地址存在数组里,方便后续快速查找。
  • 匹配File1:对File1的每一行,分别提取第1、3列的前5字符,去映射表中查找对应的loopback地址,没找到就用空字符串填充(你可以根据需求改成"NO_MATCH"这类标记)。
  • 输出结果:把原行内容和两个匹配到的地址拼接后输出,完美满足你追加两个新列的需求。
示例演示

假设你的文件内容如下:

File2-Node_Loopbacks.txt

ABCDE123 10.0.0.1
FGHIJ456 10.0.0.2
KLMNO789 10.0.0.3
ABCDEXXX eth0 FGHIJYYY
KLMNOAAA eth1 PQRSTBBB
XYZABC11 eth2 ABCDE222

运行脚本后输出:

ABCDEXXX eth0 FGHIJYYY 10.0.0.1 10.0.0.2
KLMNOAAA eth1 PQRSTBBB 10.0.0.3 
XYZABC11 eth2 ABCDE222  10.0.0.1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:40:14