首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWK匹配行/列,然后比较另一列并打印

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

Stack Overflow用户
提问于 2018-10-23 20:46:11
回答 1查看 97关注 0票数 2

这里对AWK比较陌生。想比较两个文件。前两列是匹配的,以便比较第三列。第三列需要更大100,才能从第二个文件中打印出该行。一些数据可能存在于一个文件中,但在另一个文件中不存在。我不认为这对AWK很重要,但是对于分隔来说,空格并不是很一致的。这里有个小狙击手。

File1

代码语言:javascript
复制
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

代码语言:javascript
复制
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

输出

代码语言:javascript
复制
TC_MCA_GCKN     SMC@L   200 200 0   0
WDF_ARRAY_DW0(0)        DCDC@L      842      867      271      270

这是我的密码。不起作用。不知道为什么。

代码语言:javascript
复制
awk 'NR==FNR{a[$1,$2];b[$3];next} (($1,$2) in a) && ($3> (b[$1]+100))' File1 File2

NR==FNR{$1,2;b$3;next}从第一个文件(我有问题使其为一个)生成两个数组,前两列进入a以确认我们正在比较相同的东西,而我用来比较的第三列由于较晚的模式高似乎是比较合理的断言。

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

& ($3> (b$1+100))‘我认为这就是问题所在。应该查看第二文件列3是否大于或大于第一文件列3(数组b中的第一列和唯一列)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-23 21:16:11

您需要用相同($1,$2)的组合输入值。由于我们不将a用于任何其他目的,所以只需将值存储在那里即可。

代码语言:javascript
复制
$ 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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52957603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档