繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM