AWK - 比较两个文件,匹配两个字段,插入新列

时间:2018-04-18 19:00:12

标签: awk

此代码已损坏。我知道它的低效运行两次类似的代码来获得输出,但我对AWK并不擅长。

在第一次运行中,将$ 1和$ 2的file1与$ 1和$ 2匹配。当匹配时,将file1的$ 3插入到$ 1的file1中。

在第二次运行中,将$ 1和$ 2的file1与$ 4和$ 5的“部分输出”匹配。当匹配时,将$ 3的file1插入$ 6的“部分文件”中。

awk 'BEGIN {FS=OFS="\t"} 
       NR == FNR { values[$1 FS $2] = $3; next } 
       ($1 FS $2) in values { $3 = values[$1 FS $2]}1' file2 file1 >> partial-output

awk 'BEGIN {FS=OFS="\t"} 
       NR == FNR { values[$4 FS $5] = $6; next } 
       ($1 FS $2) in values { $6 = values[$4 FS $5]}1' partial-output file1 

File1中

NODE1   INT1    10
NODE1   INT2    20
NODE2   INT1    10
NODE2   INT2    20
NODE3   INT1    10
NODE3   INT2    20
NODE4   INT1    10
NODE4   INT2    20

文件2

NODE1   INT1    NODE2   INT1
NODE3   INT1    NODE4   INT1
NODE1   INT2    NODE3   INT2
NODE2   INT2    NODE4   INT2

部分输出

NODE1   INT1    10  NODE2   INT1
NODE3   INT1    10  NODE4   INT1
NODE1   INT2    20  NODE3   INT2
NODE2   INT2    20  NODE4   INT2

最终输出

NODE1   INT1    10  NODE2   INT1    10
NODE3   INT1    10  NODE4   INT1    10
NODE1   INT2    20  NODE3   INT2    20
NODE2   INT2    20  NODE4   INT2    20

1 个答案:

答案 0 :(得分:1)

你需要这个吗?

awk '
    BEGIN {FS = OFS = "\t"} 
    NR == FNR {v[$1,$2] = $3; next} 
    {print $1, $2, v[$1,$2], $3, $4, v[$3,$4]}
' file1 file2
相关问题