AWK匹配行/列然后比较另一列并打印

时间:2018-10-23 20:46:11

标签: unix awk

相对于AWK而言,这里相对较新。想要比较两个文件。前两列要匹配,以便比较第三列。第三列需要大100才能从第二个文件中打印该行。一些数据可能存在于一个文件中,但不存在于另一个文件中。我认为这对AWK无关紧要,但是间隔对于分隔不是很一致。这是一个小狙击手。

File1

USTL_WR_DATA      MCASYNC@L      -104      -102      -43      -46
USTL_WR_DATA         SMC@L      171      166       67       65
TC_MCA_GCKN     SMC@L   -100    -100    0   0
WDF_ARRAY_DW0(0)        DCDC@L      297      297      101      105
WDF_ARRAY_DW0(0)    MCASYNC@L   300 300 50  50
WDF_ARRAY_DW0(0)        MCMC@L       12       11       34       31

File2

TC_MCA_GCKN     SMC@L   200 200 0   0
WDF_ARRAY_DW0(0)        DCDC@L      842      867      271      270
WDF_ARRAY_DW0(0)    MCASYNC@L   300 300 50  50
WDF_ARRAY_DW0(1)    SMCw@L  300 300 50  50
WDF_ARRAY_DW0(2)        DCDC@L      896      927      279      286
WDF_ARRAY_DW0(2)    MCASYNC@L   300 300 50  50

输出

TC_MCA_GCKN     SMC@L   200 200 0   0
WDF_ARRAY_DW0(0)        DCDC@L      842      867      271      270

这是我的代码。不工作不知道为什么。

awk 'NR==FNR{a[$1,$2];b[$3];next} (($1,$2) in a) && ($3> (b[$1]+100))' File1 File2

NR == FNR {a [$ 1,$ 2]; b [$ 3]; next}从第一个文件生成两个数组(我在使它成为一个数组时遇到问题),前两列放在a中以确认我们比较同一件事,而我用来比较的第三列,因为后期模式高似乎比较合理

((a中的($ 1,$ 2))确保第二个文件中的前两列是我们要比较的列。

&&($ 3>(b [$ 1] +100))'我认为这就是问题所在。假设第二个文件的第3列是否比第一个文件的第3列(数组b中的第一个也是唯一的)大100或更多

1 个答案:

答案 0 :(得分:3)

您需要使用相同的($ 1,$ 2)组合键输入值。由于我们不会将a用于其他任何目的,因此只需在其中存储值即可。

$ awk 'NR==FNR {a[$1,$2]=$3; next} 
       ($1,$2) in a && $3>a[$1,$2]+100' file1 file2

TC_MCA_GCKN     SMC@L   200 200 0   0
WDF_ARRAY_DW0(0)        DCDC@L      842      867      271      270