相对于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或更多
答案 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