【问题标题】:Merge two files based on two common columns, and replace the blank to 0基于两个公共列合并两个文件,并将空白替换为0
【发布时间】:2020-09-26 21:05:25
【问题描述】:

我真的需要您的帮助来合并基于 $1$2 的两个文件(包含 3 列)并获取 $3 的所有值并将空/空白替换为 0。非常感谢提前

文件1:

chr1 1000001 135       
chr2 1000002 57
chr2 4400002 117    
chr6 1000003 172

文件2:

chr1 1000001 377       
chr1 5500002 320       
chr6 1000003 432

期望的输出:

chr1 1000001 135    377    
chr1 5500002  0    320     
chr2 1000002 57     0
chr2 4400002 117      0
chr6 1000003 172   432

我试过了

awk -F'\t' 'NR==FNR{A[$1$2]=$3; next} {A[$1$2]; B[$1$2]=$3} END{for (id in A) print id,A[id],B[id], "0"}' OFS='\t' File1 File2

输出

chr1 1000001 135       
chr1 1000001 377       
chr1 5500002 320       
chr2 1000002 57
chr2 4400002 117    
chr6 1000003 172
chr6 1000003 432

【问题讨论】:

    标签: unix awk


    【解决方案1】:

    您能否尝试仅在 GNU awk 中使用所示示例进行跟踪、编写和测试。

    awk '
    FNR==NR{
      a[$1 OFS $2]=$NF
      next
    }
    {
      if(($1 OFS $2) in a){
        d[$1 OFS $2]
        $(NF+1)=a[$1 OFS $2]
      }
      else{
        $(NF+1)=0
      }
      print
    }
    END{
      for(i in a){
        if(!(i in d)){
          print i,"0",a[i]
        }
      }
    }
    ' Input_file2  Input_file1 | sort -k1
    

    输出如下。

    chr1 1000001 135 377
    chr1 5500002 0 320
    chr2 1000002 57 0
    chr2 4400002 117 0
    chr6 1000003 172 432
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 2014-07-12
      • 1970-01-01
      • 2013-03-28
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多