2017-05-04 23 views
-2

我需要根据另一个文件中包含的映射合并两个文件。因此,在下面的示例中,将file1与file2结合,其中file1中的第2列与file3中的第2列匹配,并且file2中的第2列与file3中的第4列匹配。根据第三个文件中的映射合并两个文件

优选地,其利用UNIX程序诸如AWK等的溶液

file1的:

Scf_3L 12798910 T 0 41 0 0 NA NA 
Scf_3L 12798911 C 0 0 43 0 NA NA 
Scf_3L 12798912 A 42 0 0 0 NA NA 
Scf_3L 12798913 G 0 0 0 44 NA NA 
Scf_3L 12798914 T 0 42 0 0 NA NA 
Scf_3L 12798915 G 0 0 0 44 NA NA 
Scf_3L 12798916 T 0 42 0 0 NA NA 
Scf_3L 12798917 A 41 0 0 0 NA NA 
Scf_3L 12798918 G 0 0 0 43 NA NA 
Scf_3L 12798919 T 0 43 0 0 NA NA 
Scf_3L 12798920 T 0 41 0 0 NA NA 

file2的:

3L 12559896 T 0 31 0 0 NA NA 
3L 12559897 C 0 0 33 0 NA NA 
3L 12559898 A 34 0 0 0 NA NA 
3L 12559899 G 0 0 0 33 NA NA 
3L 12559900 T 0 34 0 0 NA NA 
3L 12559901 G 0 0 0 33 NA NA 
3L 12559902 T 0 33 0 0 NA NA 
3L 12559903 A 33 0 0 0 NA NA 
3L 12559904 G 0 0 0 33 NA NA 
3L 12559905 T 0 34 0 0 NA NA 
3L 12559906 T 0 33 0 0 NA NA 

file3的:

3L 12798910 T 12559896 T 
3L 12798911 C 12559897 C 
3L 12798912 A 12559898 A 
3L 12798913 G 12559899 G 
3L 12798914 T 12559900 T 
3L 12798915 G 12559901 G 
3L 12798916 T 12559902 T 
3L 12798917 A 12559903 A 
3L 12798918 G 12559904 G 
3L 12798919 T 12559905 T 
3L 12798920 T 12559906 T 

输出:

Scf_3L 12798910 T 0 41 0 0 NA NA 3L 12559896 T 0 31 0 0 NA NA 
Scf_3L 12798911 C 0 0 43 0 NA NA 3L 12559897 C 0 0 33 0 NA NA 
Scf_3L 12798912 A 42 0 0 0 NA NA 3L 12559898 A 34 0 0 0 NA NA 
Scf_3L 12798913 G 0 0 0 44 NA NA 3L 12559899 G 0 0 0 33 NA NA 
Scf_3L 12798914 T 0 42 0 0 NA NA 3L 12559900 T 0 34 0 0 NA NA 
Scf_3L 12798915 G 0 0 0 44 NA NA 3L 12559901 G 0 0 0 33 NA NA 
Scf_3L 12798916 T 0 42 0 0 NA NA 3L 12559902 T 0 33 0 0 NA NA 
Scf_3L 12798917 A 41 0 0 0 NA NA 3L 12559903 A 33 0 0 0 NA NA 
Scf_3L 12798918 G 0 0 0 43 NA NA 3L 12559904 G 0 0 0 33 NA NA 
Scf_3L 12798919 T 0 43 0 0 NA NA 3L 12559905 T 0 34 0 0 NA NA 
Scf_3L 12798920 T 0 41 0 0 NA NA 3L 12559906 T 0 33 0 0 NA NA 
+2

您选择了合适的工具('awk')。向我们展示你的努力? – sat

+1

这似乎不是一个问题,只是寻找工作解决方案 – frmi

回答

1

可以使用join命令两个咒语:

join -o1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9 -1 1 -2 2 <(join -o 2.4,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.1,2.2,2.3 -1 2 -2 2 file1 file3) file2 

选项-o仅列出输出的领域。

join加入file1与映射file3并为第二外键与file2

加入如果列的顺序并不重要,你可以跳过-o选项,并使用类似:

join -1 12 -2 2 <(join -1 2 -2 2 file1 file3) file2 
相关问题