按条件合并具有不同列信息的文件

mfk*_*534 2 python unix perl awk sed

我有三个文件,每个文件中的信息不会以任何方式重叠 - 但是,它们需要以特定的方式相互合并才能有用.

第一个文件在后两个文件中是唯一的,它们以相同的方式设置.文件1看起来像这样:

rs101   12  126890980   A   G   
rs102   4   114553253   A   C   
rs103   9   172776204   C   T
Run Code Online (Sandbox Code Playgroud)

文件2看起来像这样:

1   178 0.12    0.26    0.02    
1   1458    0.35    0.37    0.021   
1   318 0.99    0.105   0.08
Run Code Online (Sandbox Code Playgroud)

文件3看起来像这样:

 1  3567    0.78    0.67    0.005   
 0  0   0   0   0   
 1  3567    0.34    -0.15   0.001 
Run Code Online (Sandbox Code Playgroud)

我想要一个脚本,将这些文件合并到文件中以生成第三个文件:

rs101   12  126890980   A   G
1   178 0.12    0.26    0.02
1   3567    0.78    0.67    0.005
rs102   4   114553253   A   C   
1   1458    0.35    0.37    0.02
0   0   0   0   0
rs103   9   172776204   C   T
1   318 0.99    0.105   0.08
1   3567    0.34    -0.15   0.001 
Run Code Online (Sandbox Code Playgroud)

问题是如果这些文件合并不正确,它们在运行分析时将无法提供正确的信息 - 我可以在每个文件的末尾添加一个唯一的列(例如,rs#可以在文件一中打印两次(一次)在第一列中,一次在最后一列中),然后相应的rs号可以添加到文件2和3的末尾的另一列中.然后我可以手动检查合并是否正确发生.任何见解或建议表示赞赏!

Ste*_*eve 5

一种方式,使用paste:

paste -d "\n" file1.txt file2.txt file3.txt
Run Code Online (Sandbox Code Playgroud)

结果:

rs101   12  126890980   A   G   
1   178 0.12    0.26    0.02    
1  3567    0.78    0.67    0.005   
rs102   4   114553253   A   C   
1   1458    0.35    0.37    0.021   
0  0   0   0   0   
rs103   9   172776204   C   T
1   318 0.99    0.105   0.08
1  3567    0.34    -0.15   0.001
Run Code Online (Sandbox Code Playgroud)

这假设您的每个输入文件包含相同数量的行.要检查每个文件(从而避免潜在的合并问题),请使用wc:

wc -l file1.txt file2.txt file3.txt

结果:

3 file1.txt
3 file2.txt
3 file3.txt
9 total
Run Code Online (Sandbox Code Playgroud)

HTH