【问题标题】:Merging two files by a single column in unix在unix中通过单列合并两个文件
【发布时间】:2012-03-05 23:56:25
【问题描述】:

我想在 unix 中按一列合并两个文件。

我有file_a:

subjectid name age  
12 Jane 16  
24 Kristen 90  
15 Clarke 78  
23 Joann 31  

我还有另一个文件_b:

subjectid prob_disease  
12 0.009  
24 0.738  
15 0.392  
23 1.2E-5  

我想在命令行中合并这些文件。我想通过 subjectid 合并文件 a 和 b。由于每个文件大约有 200 万行长,我在 R 中尝试过,但由于数据量大而冻结,有人可以帮我在 linux 中执行此操作吗? 期望的输出:

subjectid prob_disease name age  
12 0.009 Jane 16  
24 0.738 Kristen 90   
15 0.392 Clarke 78  
23 1.2E-5 Joanna 31     

请帮忙,谢谢!

【问题讨论】:

    标签: linux unix merge


    【解决方案1】:

    查看join(1)。在您的情况下,您甚至不需要任何标志:

    $ join file_b file_a
    subjectid prob_disease name age
    12 0.009 Jane 16
    24 0.738 Kristen 90
    15 0.392 Clarke 78
    23 1.2E-5 Joann 31
    

    【讨论】:

    • 只要这些行已经按 ID 排列就可以了,如果没有,则需要对其进行排序。
    • ...在这种情况下,您还应该查看sort(1)
    • 我打算建议对这两个文件进行 awk hack,但 join(1) 显然是正确的答案。不过,不需要使用 awk 进行预排序。
    【解决方案2】:

    您正在寻找join 命令:

    $ cat test.1
    12 Jane 16
    24 Kristen 90
    15 Clarke 78
    23 Joann 31 
    $ cat test.2
    12 0.009
    24 0.738
    15 0.392
    23 1.2E-5 
    $ join -j1 -o 2.1,2.2,1.2,1.3  <(sort test.1) <(sort test.2)
    12 0.009 Jane 16
    15 0.392 Clarke 78
    23 1.2E-5 Joann 31
    24 0.738 Kristen 90
    $ 
    

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 1970-01-01
      • 2020-08-20
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 2021-05-09
      • 1970-01-01
      相关资源
      最近更新 更多