首页 > 解决方案 > AWK - 匹配前 3 个字段,从同一行的两个文件中打印 $6 和 $7

问题描述

我的两个输入文件已更改,我需要匹配两个文件的前三个字段。进行匹配时,我想打印文件 1 的 $1(其中匹配的)和 $6 和 $7 以及文件二的 $6 和 $7。原始代码是一个 AWK 单行,仅匹配第一个字段。

文件 1

BSTN-SANJ   BSTN    SANJ    0   0   50  105910
MRFD-SANJ   MRFD    SANJ    0   0   40  69105
NYRK-SANJ   NYRK    SANJ    0   0   30  905010
SANJ-HMRD   SANJ    HMRD    0   0   25  69010
SANJ-NRFK   SANJ    NRFK    0   0   38  61506

文件2

BSTN-SANJ   BSTN    SANJ    0   0   45  601251
MRFD-SANJ   MRFD    SANJ    0   0   39  919591
NYRK-SANJ   NYRK    SANJ    0   0   25  690155

输出

BSTN-SANJ   50  105910  45  601251  
MRFD-SANJ   40  69105   39  919591  
NYRK-SANJ   30  905010  25  690155  

标签: awk

解决方案


这会做

awk -v OFS='\t' '
    {key = $1 OFS $2 OFS $3} 
    NR == FNR {f2[key] = $6 OFS $7; next} 
    key in f2 {print $1, $6, $7, f2[key]}
' file2 file1

推荐阅读