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

请求编写Awk脚本:基于指定条件跨文件填充字段

实现需求的Awk脚本方案

我来帮你搞定这个跨文件匹配的Awk脚本,完全贴合你的需求逻辑:

核心思路

  1. 先遍历文件2,把「follow doc(第2列)」作为键,「predecessor(第1列)」作为值,存到一个关联数组里,这样后续查找能直接快速匹配。
  2. 再遍历文件1,对每一行检查:如果第1列是INV且第2列是CAN,就用该行第3列的documentnumber去数组里找对应的predecessor,替换到第4列;其他行保持原样输出。

完整Awk脚本

BEGIN {
    # 这里设置字段分隔符和输出分隔符,根据你的实际文件格式调整
    # 如果是逗号分隔的CSV,改成 FS=","; OFS=","
    FS = "\t"
    OFS = "\t"
}

# 处理第一个输入文件(文件2),构建映射表
NR == FNR {
    follow_doc_map[$2] = $1
    next
}

# 处理第二个输入文件(文件1),完成匹配替换
{
    # 检查目标条件
    if ($1 == "INV" && $2 == "CAN") {
        # 找到匹配值就替换第4列,没找到则保留原第4列内容(可按需修改)
        $4 = (follow_doc_map[$3] != "") ? follow_doc_map[$3] : $4
    }
    # 输出修改后的行
    print $0
}

使用方法

把上面的代码保存成match_docs.awk,然后在终端执行:

awk -f match_docs.awk 文件2.txt 文件1.txt > 更新后的文件1.txt

⚠️ 注意:文件顺序不能搞反,必须先写文件2,再写文件1,这样Awk才会先构建映射表再处理文件1。

自定义调整提示

  • 字段分隔符:如果你的文件是空格分隔(默认),可以删掉BEGIN块里的FS/OFS设置;如果是CSV,改成FS=","; OFS=","。
  • 空值处理:如果文件2里找不到对应documentnumber时,想把第4列设为空字符串,把脚本里的$4 = (follow_doc_map[$3] != "") ? follow_doc_map[$3] : $4改成$4 = follow_doc_map[$3]即可。
  • 列索引确认:确保你的文件列顺序和需求描述完全一致(比如文件1的第3列确实是documentnumber),如果列位置不对,调整脚本里的$1/$2等数字即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:30:14