【问题标题】:Join 2 files on 2 columns returning 0 for non-matches加入 2 列上的 2 个文件,不匹配返回 0
【发布时间】:2014-09-21 07:49:27
【问题描述】:

我有 2 个已排序的文件,每个文件有 3 列。我需要根据前 2 列合并它们并返回 4 列,即匹配的 2 列,然后是每个文件的第 3 列。我曾尝试在 awk 中使用

awk 'NR==FNR{a[$1FS$2]=$3;NEXT}   
  {k=$1FS$2;print k,(a[k]?a[k]:a[k]*1),$3;delete a[k]}        
  END{for(k in a)print k,a[k],"0"}' 

但它并没有像我希望的那样工作。

我的输入文件如下所示:

文件 1:

Chr BPPos Chip_1

1 1234 1

1 1765 2

1 2043 3

2 1231 4

文件 2:

Chr BPPos Chip_2

1 1765 1

1 2074 2

2 1231 3

2 2141 4

期望的输出:

Chr BPPos Chip_1 Chip_2

1 1234 1 0

1 1765 2 1

1 2043 3 0

1 2073 0 2

2 1231 4 3

2 2141 0 4

任何帮助将不胜感激!

史蒂夫

【问题讨论】:

    标签: unix join awk merge


    【解决方案1】:

    试试这个单线:

    awk '{k=$1 FS $2}
         NR==FNR{a[k]=$3;next}
         k in a{print $0,a[k];delete a[k];next}{print $0,"0"}
         END{for(x in a)print x,"0",a[x]}' file2 file1
    

    使用您的数据,输出为:

    kent$  awk '{k=$1 FS $2}NR==FNR{a[k]=$3;next}k in a{print $0,a[k];delete a[k];next}{print $0,"0"}END{for(x in a)print x,"0",a[x]}' f2 f1
    Chr BPPos Chip_1 Chip_2
    1 1234 1 0
    1 1765 2 1
    1 2043 3 0
    2 1231 4 3
    1 2074 0 2
    2 2141 0 4
    

    【讨论】:

    • 这似乎在文件顶部给了我一个奇怪的格式,我的标题不正确,并且由于某种原因,第一列和最后一列似乎已经加入。也许我的数据不太正确,我会做一些编辑然后再试一次,但下面的评论似乎有效,但速度要慢得多。感谢您在这里的帮助,我觉得我对您的解决方案的应用可能不公平。
    • @slarmer1 我用您提供的两个示例进行了测试,如您所见,输出与答案一起发布。如果您的问题中的数据格式不是 file1 file2,则输出可能会有所不同。无论如何,你已经展示了你的代码,我认为你应该知道 awk 编程。你可以阅读我的代码,理解这个想法,做相应的改变来适应你的数据。
    • 我想我现在已经整理好了。再次感谢!
    【解决方案2】:
    awk '{ k = $1 FS $2 } !a[k]++ { keys[i++] = k } FNR == NR { b[k] = $3; next } { c[k] = $3 } END { for (i = 0; i in keys; ++i) { k = keys[i]; print k, k in b ? b[k] : "0", k in c ? c[k] : "0" } }' file1 file2
    

    输出:

    Chr BPPos Chip_1 Chip_2
    1 1234 1 0
    1 1765 2 1
    1 2043 3 0
    2 1231 4 3
    1 2074 0 2
    2 2141 0 4
    

    【讨论】:

    • 我认为这工作得很好,文件很大,所以需要一段时间来检查和确定,但我认为这成功了。谢谢!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多