根据 1 个字段连接具有可变列和行号的文件

根据 1 个字段连接具有可变列和行号的文件

如果太基础的话,请提前致歉,我是新手。我有两个文件(文件 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

顺便说一句,你很好地描述了问题并提供了示例。这使得调试变得非常简单。

相关内容