根据名称字段加入两个csv文件

时间:2013-06-06 12:05:28

标签: join

我有两个带有id和name的表。我想基于name字段和输出id和id加入它们。 文件1:

  

id,name

     

a0N3000000A0JNaEAN,Guarda Val

     

a0Na000000G8CCfEAN,Bentleys House

     

a0Na000000EQVg6EAH,Alpine Lodge Resort

     

a0N30000007LwcaEAC,Kulm Hotel

文件2:

  

id,name

     

a0BQ00000013OeSMAU,Guarda Val

     

a0BQ00000013OeBMAU,Bentleys House

     

a0BQ00000013OeVMAU,Alpine Lodge Resort

     

a0BQ0000001xlQoMAI,Kulm Hotel

我希望看到的是:

  

id.1,id.2

     

a0N3000000A0JNaEAN,a0BQ00000013OeSMAU

     

a0Na000000G8CCfEAN,a0BQ00000013OeBMAU

     

a0Na000000EQVg6EAH,a0BQ00000013OeVMAU

     

a0N30000007LwcaEAC,a0BQ0000001xlQoMAI

我曾尝试过涂鸦,但我最接近的是:

  

加入-t,-a1 -a2 -1 2 -2 2 -o'0,1.2'<(sort sandees.1.csv)<(sort prodees.1.csv)

只打印出名字。为了记录,我使用的是OS X 10.8。我已经看到不同操作系统之间的连接行为可能会有所不同。 感谢

1 个答案:

答案 0 :(得分:0)

要做的第一件事是将输入文件作为文件;在此之后,您可以使用更高级的语法。

接下来要按照join的要求进行排序,即对第二个字段而不是第一个字段的每个文件进行排序。你需要使用:

sort -t, -k2 sandees1.csv >sandees1_sorted.csv
sort -t, -k2 prodees1.csv >prodees1_sorted.csv

您的输出格式-o指定密钥加上第一个文件的第二个字段。你说你想要每个文件的第一个字段。

join -t, -a1 -a2 -1 2 -2 2 -o '1.1,2.1' sandees1_sorted.csv prodees1_sorted.csv 

将产生所需的结果。