![根据 1 个字段连接具有可变列和行号的文件](https://linux22.com/image/1524926/%E6%A0%B9%E6%8D%AE%201%20%E4%B8%AA%E5%AD%97%E6%AE%B5%E8%BF%9E%E6%8E%A5%E5%85%B7%E6%9C%89%E5%8F%AF%E5%8F%98%E5%88%97%E5%92%8C%E8%A1%8C%E5%8F%B7%E7%9A%84%E6%96%87%E4%BB%B6.png)
如果太基础的话,请提前致歉,我是新手。我有两个文件(文件 1 和文件 2)。我想查看文件 1 的第 6 列,如果它与文件 2 的第 1 列中的条目匹配,则将该行的内容打印到文件 1 的末尾,以创建新文件。以下是我的文件的样子,以及我希望它们的样子。我尝试了以下方法,但没有成功,输出为空。
sort -k6 file 1 > file1_sorted
sort –k1 file2 > file2_sorted
join -1 6 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,2.10,2.11,2.12,2.13 file1_sorted file2_sorted > file3
这可能是因为连接错误,或者因为文件 1 排序不正确,或者两者兼而有之。两个文件都是 csv,文件 2 没问题,但文件 1 似乎在最后一列后有一些空白,当我尝试通过 选择文件 1 的第 6 列时awk '{print $6} file 1 >test
,它不起作用……我不知道为什么。我尝试使用sed
等删除制表符,但没有成功。请帮忙!
文件 1(5052 行,6 列)
rs28595482,1,1,1953576,ENSG00000187730,GABRD
rs2376805,1,1,1956362,ENSG00000187730,GABRD
rs2229110,1,1,1957037,ENSG00000187730,GABRD
rs3820007,1,1,1957299,ENSG00000187730,GABRD
rs28409373,1,1,1959978,ENSG00000187730,GABRD
rs2376803,1,1,1967954,NA,GABRD
rs11582799,1,1,7832026,ENSG00000269925,VAMP3
文件 2(344 行,13 列)
GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0
ABCG1,21,0,0,0,0,cort,0,0,0,0,0,0
VAMP3,0,0,0,0,0,0,0,0,0,0,0,0
ADAMTS2,0,0,0,0,0,0,0,0,0,0,0,0
ADAMTSL1,9,0,0,0,0,0,oxt,0,0,0,0,rest
ADCY7,16,0,0,0,0,cort,0,0,0,0,0,0
我期望通过一些魔法得到什么(文件 3)
rs28595482,1,1,1953576,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0
rs2376805,1,1,1956362,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0
rs2229110,1,1,1957037,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0
rs3820007,1,1,1957299,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0
rs28409373,1,1,1959978,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0
rs2376803,1,1,1967954,NA,GABRD, 16,0,0,gaba,0,0,oxt,0,0,0,0,0
rs11582799,1,1,7832026,ENSG00000269925, VAMP3,0,0,0,0,0,0,0,0,0,0,0,0
答案1
你是很近。您需要做的是告诉join
使用什么作为输入终止符,在本例中-t,
:
join -t, -1 6 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,2.10,2.11,2.12,2.13 file1_sorted file2_sorted > file3
顺便说一句,你很好地描述了问题并提供了示例。这使得调试变得非常简单。