如何合并2个表使用awk(how to Merge 2 tables with awk)

2019-10-30 03:25发布

首先,我的英语水平很抱歉,我知道有关于AWK很多各种主题,但它是一个非常困难的函数,我...我想合并使用公共列使用awk两个表。 在表中的行的数量是不同的。 我有我想修改我的第一台,第二个作为一个参考表。 我想我比较colunme1.F1column1.F2 。 当它匹配,加上column2.F2在我的file1 。 但是我必须保持我的所有行file1

我给你举个例子:

文件1

Num_id,Name,description1,description2,description3
?,atlanta_1,,,      
RO_5,babeni_SW,,,           
? ,Bib1,,,          
RO_9,BoUba_456,,,           
?,Castor,,,         

文件2

official_Num_id,official_Name
RO_1,America
RO_2,Andre
RO_3,Atlanta
RO_4,Axa
RO_5,Babeni
RO_6,Barba
RO_7,Bib
RO_8,Bilbao
RO_9,Bouba
RO_10,Castor

文件3

Num_id,Name,description1,description2,description3,official_Name
?,atlanta_1,,,
RO_5,babeni_SW,,,Babeni
?,Bib1,,,
RO_9,BoUba_456,,,Bouba
?,Castor,,,

我读了很多关于互联网解决方案,似乎AWK可以工作。我试过awk 'NR==FNR {h[$1] = $2; next} {print $0,h[$1]}' $File1 $File2 > file3 awk 'NR==FNR {h[$1] = $2; next} {print $0,h[$1]}' $File1 $File2 > file3 ,但我的命令不工作,我的File3看起来正是File1

在第二次,我不知道这是否是可以比较我的两个第二列名时,有像atlanta_1和亚特兰大的差异,并添加official_num_id和我的文件1的official_name。

任何英雄在那里?

Answer 1:

你有它,除了两个小东西。 首先,您需要将您的文件分隔符设置,并且,第二,反在命令行中输入文件的顺序,以便参考文件第一次处理:

$ awk 'BEGIN {FS=OFS=","} NR==FNR {h[$1] = $2; next} {print $0,h[$1]}' File2 File1
Num_id,Name,description1,description2,description3,
?,atlanta_1,,,,
RO_5,babeni_SW,,,,Babeni
? ,Bib1,,,,
RO_9,BoUba_456,,,,Bouba
?,Castor,,,,


Answer 2:

您也可以使用此join命令:

 join --header  --nocheck-order -t, -1 1 -2 1 -a 1 file1 file2


Answer 3:

要回答你的问题,如果有可能比较我的两个第二柱体时的名字有像atlanta_1和亚特兰大的差异,并添加official_num_id和我的文件1的official_name:

$ awk '
BEGIN { FS=OFS="," }
NR==FNR {                                                  # file2
    a[tolower($2)]=$0                                      # hash on lowercase city
    next
}
{                                                          # file1
    split($2,b,"[^[:alpha:]]")                             # split on non-alphabet
    print $0 (tolower(b[1]) in a?OFS a[tolower(b[1])]:"")  
}' file2 file1 
Num_id,Name,description1,description2,description3
?,atlanta_1,,,,RO_3,Atlanta
RO_5,babeni_SW,,,,RO_5,Babeni
? ,Bib1,,,,RO_7,Bib
RO_9,BoUba_456,,,,RO_9,Bouba
?,Castor,,,,RO_10,Castor

split将分裂Name非字母字符领域,即_atlanta_11Bib1等。所以它可能与破折号等城市失败,编辑花样[^[:alpha:]]split相应。 头不匹配这些名字,重新思考的头名。



文章来源: how to Merge 2 tables with awk