根据文件1($ 1和$ 2)过滤文件2

时间:2018-08-07 20:54:31

标签: arrays awk multiple-columns

我正在尝试根据第一个文件过滤辅助文件。我需要它们的行数相同,因此我想将我的前两列中的每一列(因为它们是具有唯一ID的列)存储在数组中,然后与第二个文件进行交叉检查。下面是我的一支班轮。我已经成功过滤了第一个数组,但是实施第二个数组却导致了我的问题。下面是我的示例数据,它们都是制表符分隔的。

代码

awk 'NR==FNR{position[$2]++;next}$2 in position' && 'NR==FNR{chrm[$1]++next}$1 in chrm' file1 file2

样本数据

文件1

ID        Pos     E       N
unique1   15       0.01   0.02
unique1   18       0.01   0.02  
unique1   12       0.01   0.02  
unique2   20       0.01   0.02  
unique2   23       0.01   0.02  
unique2   27       0.01   0.02  
unique2   20       0.01   0.02  
unique3   25       0.01   0.02  
unique3   35       0.01   0.02  
unique3   42       0.01   0.02 

文件2

ID        Pos     E       N
unique1   15       0.01   0.02
unique2   27       0.01   0.02  
unique2   20       0.01   0.02  
unique3   24       0.01   0.02  
unique3   150      0.01   0.02  
unique3   227      0.01   0.02

预期结果

ID        Pos     E       N
unique1   15       0.01   0.02
unique2   27       0.01   0.02  
unique2   20       0.01   0.02  

我不明白为什么&&不会将第二个数组作为创建我的输出的一组参数。它给了我一个空白文件。

1 个答案:

答案 0 :(得分:2)

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

ID        Pos     E       N
unique1   15       0.01   0.02
unique2   27       0.01   0.02  
unique2   20       0.01   0.02 

您的&&不在awk脚本的范围内,因此您完全不需要...