[英]Obtain patterns from a file, compare to a column of another file, print matching lines, using awk
[英]AWK match lines/columns then compare another column and print
在这里对AWK来说相对较新。 想要比较两个文件。 前两列要匹配,以便比较第三列。 第三列需要大100才能从第二个文件中打印该行。 一些数据可能存在于一个文件中,但不存在于另一个文件中。 我认为这对AWK无关紧要,但是间隔对于分隔不是很一致。 这是一个小狙击手。
文件1
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
文件2
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大100或更多(数组b中的第一列,也是唯一列)
您需要使用相同的($ 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.