我发现这在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命令-如果你能帮助我,那就太好了。谢谢
1条答案
按热度按时间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
中,如果是,则打印它们。