【问题标题】:join 2 files based on 1st & 2nd column of file AND 3rd & 4th column of second file根据文件的第 1 列和第 2 列以及第 2 文件的第 3 列和第 4 列加入 2 个文件
【发布时间】:2021-08-10 22:13:49
【问题描述】:

文件1

rs12345  G  C  
rs78901  A  T

文件2

3  22745180  rs12345  G  C,G  
12 67182999  rs78901  A  G,T  

想要的输出

3  22745180  rs12345  G  C  
12 67182999  rs78901  A  T  

我试过了 awk 'NR==FNR {h[$1] = $3; next} {print $1,$2,$3,h[$2]}' file1 file2

生成的输出

3  22745180  rs12345  

将 file2 的前 4 列和 file1 的第 3 列打印为输出中的第 5 列

【问题讨论】:

    标签: join awk paste


    【解决方案1】:

    你可以使用这个awk:

    awk 'FNR == NR {map[$1,$2] = $3; next} ($3,$4) in map {$NF = map[$3,$4]} 1' f1 f2 | column -t
    
    3   22745180  rs12345  G  C
    12  67182999  rs78901  A  T
    

    更易读的版本:

    awk '
    FNR == NR {
       map[$1,$2] = $3
       next
    }
    ($3,$4) in map {
       $NF = map[$3,$4]
    }
    1' file1 file2 | column -t
    

    column -t 仅用于表格输出。

    【讨论】:

      【解决方案2】:

      如果您提出(两个文件中的行匹配),这将起作用

      paste file1 file2 | awk '{print $4,$5,$6,$7,$3}'
      

      【讨论】:

      • PASTE 不考虑两个文件中的行顺序和非配对行
      • @rij 您在问题中没有提到您需要能够配对行的脚本。例如,我的代码适用于您的问题。
      猜你喜欢
      • 2016-10-20
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多