提取两文件相同ID的行

file1的文件如下所示:

a rs1
b rs2
c rs4

file2的文件如下所示:

a 0.170721 -1.82031 0.0690841 rs1
b 0.0803412 -1.01669 0.309605 rs2
c 0.21245 0.22964 0.81843 rs3
d 0.0707158 -0.499683 0.617435 rs4

1、现在想根据file1的第二列和file2的第五列相同的rs提取数据,生成的file3如下所示:

a 0.170721 -1.82031 0.0690841 rs1
b 0.0803412 -1.01669 0.309605 rs2
d 0.0707158 -0.499683 0.617435 rs4

则用如下命令:
awk 'NR==FNR{a[$2];next}$5 in a' file1 file2 > file3

a[$2]以第一个文件的第二列为下标,建立数组a;
next跳过第一个文件到第二个文件;
$5 in a如果第二个文件第五列的ID在数值a中,则打印。

2、如果不想提取相同ID的行,则可以使用如下命令:

awk 'NR==FNR{a[$2];next} !($5 in a)' file1 file2 > file3

c 0.21245 0.22964 0.81843 rs3
posted @ 2020-07-17 09:48  橙子牛奶糖  阅读(646)  评论(2编辑  收藏  举报