基于一个公共列合并两个多列文件

时间:2016-07-11 12:41:40

标签: unix awk merge

我有两个以制表符分隔的列,我想根据公共列进行合并。 例如:

文件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

我一直在寻找herehere以及here。 到目前为止,我所看到的最接近的是:

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 

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

1 个答案:

答案 0 :(得分: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