2017-05-04 54 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 
相關問題