【问题标题】:AWK - Compare Two Files, Match Two Fields, Insert New ColumnAWK - 比较两个文件,匹配两个字段,插入新列
【发布时间】:2018-04-19 05:08:10
【问题描述】:

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

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

在第二次运行中,将 file1 的 $1 和 $2 与“部分输出”中的 $4 和 $5 进行匹配。当有匹配时,将 file1 的 $3 插入到“部分文件”的 $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 

文件1

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

【问题讨论】:

    标签: awk


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-25
      • 2016-12-09
      • 1970-01-01
      • 2018-10-25
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      相关资源
      最近更新 更多