【问题标题】:Merge two multi-column files based on one common column基于一个公共列合并两个多列文件
【发布时间】:2016-07-11 12:41:39
【问题描述】:

我有两个制表符分隔的列,我想基于一个公共列进行合并。 例如:

文件 1:

abandoning  0   V
abandonment 0   N
abandonments    0   N
abandons    0   V
abducted    0   V
abduction   0   N

文件 2:

abandonment
abducted
abduction
abound
abounds
abundance
abundant
accessable

如果信息不可用,我想将这些文件合并到具有空值的第三个文件中。

文件 3(所需结果):

abandoning  0   V
abandonment 0   N
abandonments    0   N
abandons    0   V
abducted    0   V
abduction   0   N
abound
abounds
abundance
abundant
accessable

我一直在环顾 hereherehere。 到目前为止,我所见过的最接近的是这样的:

awk '{a[$1]=a[$1] FS $2} END {for (i in a) print i a[i]}' OrigFile.txt ToMerge.txt | sort > Merged_Dict.txt 

但是,结果不包括第三列信息。 我得到的结果是:

abandoning 0
abandonment 0 
abandonments 0
abandons 0
abducted 0 
abduction 0 
abound 
abounds 
abundance 
abundant 
accessable 

关于我哪里出错的任何提示?

【问题讨论】:

标签: unix awk merge


【解决方案1】:

你可以这样做是awk,但如果你的文件已经排序,那么已经有一个工具可以做到这一点

$ join -a1 -a2 file1 file2

abandoning 0 V
abandonment 0 N
abandonments 0 N
abandons 0 V
abducted 0 V
abduction 0 N
abound
abounds
abundance
abundant
accessable

这是一个awk 解决方案

$ awk 'NR==FNR{a[$0];next} $1 in a{delete a[$1]}1; END{for(k in a) print k}' file2 file1 | 
  sort

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-16
    • 2020-05-29
    • 2014-07-12
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多