unix 使用bash基于两列查找两个 Dataframe 之间的公共行

5t7ly7z5  于 2022-11-23  发布在  Unix
关注(0)|答案(1)|浏览(158)

我发现这在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命令-如果你能帮助我,那就太好了。谢谢

ujv3wf0j

ujv3wf0j1#

只是把对奥格斯的解释加在注解上面的“细答”中:
BEGIN{FS=OFS=","},定义为输入和输出的分隔符。
NR==FNR{pair[$1,$2];next}当整个输入的记录号与当前文件的记录号匹配时(换句话说,对于第一个文件),将第一个和第二个字段作为索引的元素添加到数组pair
($1,$2) in pair||($2,$1) in pair{print $1,$2}对第二个文件进行操作,检查字段1和字段2是否以任何顺序作为索引出现在数组pair中,如果是,则打印它们。

相关问题