Unix 使用bash基于两列查找两个数据帧之间的公共行

Unix 使用bash基于两列查找两个数据帧之间的公共行,unix,awk,Unix,Awk,我发现在bash中很难解决这个问题-我有两个文件,我想根据两列查找它们之间的公共行 f1.csv: col1,col2,col3,col4 Dalir,Cpne1,down,2174 Fendrr,Aco2,up,280 Cpne1,Tox1,down,8900 f2.csv col1,col2,col3,col4,col5,col6 Linc,Rmo,ch2,ch2,p,l Tox1,Cpne1,ch1,ch2,l,p 因此,基本上代码应该只查看dfs的前两列,并查看对是否相同(对的顺序并

我发现在bash中很难解决这个问题-我有两个文件,我想根据两列查找它们之间的公共行

f1.csv:

col1,col2,col3,col4
Dalir,Cpne1,down,2174
Fendrr,Aco2,up,280
Cpne1,Tox1,down,8900
f2.csv

col1,col2,col3,col4,col5,col6
Linc,Rmo,ch2,ch2,p,l
Tox1,Cpne1,ch1,ch2,l,p
因此,基本上代码应该只查看dfs的前两列,并查看对是否相同(对的顺序并不重要)。你可以看到在第一个df中有
Cpne1,Tox1
在第三行,第二行df中有
Tox1,Cpne1
在第二行-因此这应该在第二个文件的输出中打印出来

期望输出:

Tox1,Cpne1

不幸的是,我还不能为此开发一个bash命令——如果您能帮我完成这项工作,那就太好了。谢谢

刚刚在上面的评论中为oguz的回答添加了解释:

BEGIN{FS=OFS=“,”}
定义为输入和输出的分隔符

NR==FNR{pair[$1,$2];next}
当整个输入的记录编号与当前文件的记录编号匹配时(换句话说,对于第一个文件),添加一个元素,第一个和第二个字段作为数组的索引
pair


($1,$2)成对| |($2,$1)成对{print$1,$2}
操作第二个文件,检查字段1和字段2是否以任何顺序出现在数组
成对
,如果是,则打印它们。

awk'BEGIN{FS=OFS=“,”}NR==FNR{pair[$1,$2];next}($1,$2)成对{print$1.csv>($2,$1),或者类似的东西谢谢你Ozgun-你能描述一下你代码的每一部分吗?