根据第一个文件加入多个文件
Joining several files based on first file
我正在尝试根据特定文件中的列连接多个文件,即“file1”
file1,作为“锚点”:
rs00001
rs00002
rs00003
rs00004
rs00005
文件 2:
rs00001 chr4:180168624 ANAPC4
rs00002 chr5:67819450 FABP2
rs00004 chr4:115169445 TBC1D1
rs00005 chr4:67815503 MAML3
文件 3:
rs00003 19.65 6 5 1
rs00004 17.23 5 4 1
rs00005 20.95 8 2 0
期望的输出:
rs00001 chr4:180168624 ANAPC4 . . . .
rs00002 chr5:67819450 FABP2 . . . .
rs00003 . . 19.65 6 5 1
rs00004 chr4:115169445 TBC1D1 17.23 5 4 1
rs00005 chr4:67815503 MAML3 20.95 8 2 0
我试过的代码:
paste file1 file2 file3
但它只是合二为一,并没有基于file1中的列。
rs00001 rs00001 chr4:180168624 ANAPC4 rs00003 19.65 6 5 1
rs00002 rs00002 chr5:67819450 FABP2 rs00004 17.23 5 4 1
rs00003 rs00004 chr4:115169445 TBC1D1 rs00005 20.95 8 2 0
rs00004 rs00005 chr4:67815503 MAML3
rs00005
感谢任何帮助。谢谢!
您可以使用join
,但您需要设置一些选项:
join -a1 -o1.1,2.2,2.3 -e "." <(sort test_1) <(sort test_2) > tmp_1
join -a1 -o1.1,1.2,1.3,2.2,2.3,2.4,2.5 -e "." <(sort tmp_1) <(sort test_3) > output
说明:您的示例在 3 个文件中('test_1' 'test_2' 和 'test_3')所以第一步是将 test_1 和 test_2 组合成使用连接的临时文件 (tmp_1)。 -a1
选项告诉 join 查看两个文件的第一列 'matches',-o1.1,2.2,2.3
告诉 join 打印第一个文件 (1.1) 的第一列,第二个第二个文件 (2.2) 的列和第二个文件 (2.3) 的第三列。 -e "."
告诉 join 用点填充任何空白。输入需要排序,所以 <(sort file)
用于在连接之前对内容进行排序。下一步是将临时文件与 test_3 文件合并。选项相同,但打印的列不同。
我正在尝试根据特定文件中的列连接多个文件,即“file1”
file1,作为“锚点”:
rs00001
rs00002
rs00003
rs00004
rs00005
文件 2:
rs00001 chr4:180168624 ANAPC4
rs00002 chr5:67819450 FABP2
rs00004 chr4:115169445 TBC1D1
rs00005 chr4:67815503 MAML3
文件 3:
rs00003 19.65 6 5 1
rs00004 17.23 5 4 1
rs00005 20.95 8 2 0
期望的输出:
rs00001 chr4:180168624 ANAPC4 . . . .
rs00002 chr5:67819450 FABP2 . . . .
rs00003 . . 19.65 6 5 1
rs00004 chr4:115169445 TBC1D1 17.23 5 4 1
rs00005 chr4:67815503 MAML3 20.95 8 2 0
我试过的代码:
paste file1 file2 file3
但它只是合二为一,并没有基于file1中的列。
rs00001 rs00001 chr4:180168624 ANAPC4 rs00003 19.65 6 5 1
rs00002 rs00002 chr5:67819450 FABP2 rs00004 17.23 5 4 1
rs00003 rs00004 chr4:115169445 TBC1D1 rs00005 20.95 8 2 0
rs00004 rs00005 chr4:67815503 MAML3
rs00005
感谢任何帮助。谢谢!
您可以使用join
,但您需要设置一些选项:
join -a1 -o1.1,2.2,2.3 -e "." <(sort test_1) <(sort test_2) > tmp_1
join -a1 -o1.1,1.2,1.3,2.2,2.3,2.4,2.5 -e "." <(sort tmp_1) <(sort test_3) > output
说明:您的示例在 3 个文件中('test_1' 'test_2' 和 'test_3')所以第一步是将 test_1 和 test_2 组合成使用连接的临时文件 (tmp_1)。 -a1
选项告诉 join 查看两个文件的第一列 'matches',-o1.1,2.2,2.3
告诉 join 打印第一个文件 (1.1) 的第一列,第二个第二个文件 (2.2) 的列和第二个文件 (2.3) 的第三列。 -e "."
告诉 join 用点填充任何空白。输入需要排序,所以 <(sort file)
用于在连接之前对内容进行排序。下一步是将临时文件与 test_3 文件合并。选项相同,但打印的列不同。