我正在尝试根据第一个文件过滤辅助文件。我需要它们的行数相同,因此我想将我的前两列中的每一列(因为它们是具有唯一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
我不明白为什么&&不会将第二个数组作为创建我的输出的一组参数。它给了我一个空白文件。
答案 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
脚本的范围内,因此您完全不需要...