Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 基于第三个文件中的映射合并两个文件_Unix_Join_Awk - Fatal编程技术网

Unix 基于第三个文件中的映射合并两个文件

Unix 基于第三个文件中的映射合并两个文件,unix,join,awk,Unix,Join,Awk,我需要根据另一个文件中包含的映射合并两个文件。因此,在下面的示例中,将file1与file2连接起来,其中file1中的列2与file3中的列2匹配,file2中的列2与file3中的列4匹配 最好是使用unix程序(如awk等)的解决方案 文件1: 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

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

最好是使用unix程序(如awk等)的解决方案

文件1:

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
文件2:

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
文件3:

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

您可以使用
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 

虽然这最初是使用UNIX内置程序寻找答案,但我选择了使用perl,在这里可以找到一个很好的解决方案:

您选择了合适的工具(
awk
)。向我们展示你的努力?这似乎不是一个问题,只是一个寻找有效解决方案的过程
join -1 12 -2 2 <(join  -1 2 -2 2 file1 file3 ) file2